Исключение при синтаксическом анализе JSON: не удалось декодировать VALUE_STRING как base64 (MIME-NO-LINEFEEDS): недопустимый символ '"' (код 0x22) в содержимом base64

2

Используя Джексона, я пытаюсь кодировать данные в JSON, и это дает исключение.

Я попробовал данные String & byte []:

String representation of same data is here:
Bytes converted to String-------->>
{
 "appname": "aaa",
 "deviceType": "diehdcj",
 "reportedDate": "2015-05-03T15:38:45+00:00",
 "sessionId": "5366372183482-6736-23562378",
 "deviceId": "2151272389",
 "commandName" : "wqgduwusdue",
 "protocolVersion" : "0.1",
 "protocolName" : "whjs_ashk_ask",
 "data" : "false"
}

Ява

16: 50: 46.065 [] [] ERROR AAATSHConnector [http-apr-10.40.120.85-80-exec-3] - Исключение анализа JSON: не удалось декодировать VALUE_STRING как base64 (MIME-NO-LINEFEEDS): Незаконный символ '' ' (код 0x22) в содержимом base64

Здесь код, который выполняет синтаксический анализ:

Ява

@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response retrieveDevicePassword(InputStream request, @Context HttpServletRequest servletRequest) throws BadRequestException, ValidationException, UnknownServerException
{
    ObjectMapper objectMapper = new ObjectMapper();
    DemoRequest req = null;
    DemoRequest res = null;
    byte[] data = null;
    data= IOUtils.toByteArray(request);
    DemoRequest = objectMapper.readValue(data, DemoRequest.class); //It where the Exception occurs

Ява

//Snippet of POJO
@XmlRootElement(name = "demoRequest") 
@JsonInclude(Include.NON_EMPTY) 
public class DemoRequest { 

private String commandName;

private String sessionId;

private byte[] data;

//getters & setters 

}

Удивительно, когда я пытаюсь преобразовать одну и ту же строку или байт [] с небольшим изменением фактических данных "data": "true", он работает.

Кто-нибудь может помочь

Нашел решение, но не знаю, что он делает: если я помещаю escape-символ перед false, например "data": "\ false", он отлично работает.

Что может быть объяснением этого?

  • 2
    Не могу дать вам объяснения, если вы не показываете код, который на самом деле пытается получить и проанализировать этот JSON.
Теги:
jackson

2 ответа

1

JSON Parsing Exception: Не удалось декодировать VALUE_STRING как base64 (MIME-NO-LINEFEEDS): Незаконный символ "" (код 0x22) в содержимом base64

Вышеупомянутое исключение возникает, когда свойство имеет тип байта [], а содержимое json представлено в String. Джексон считает, что в этом случае данные json представлены как закодированные base64 и пытаются декодировать его на байт []. Если строка, присутствующая в поле данных, не является правильно кодированной строкой base64, джексон повышает указанное выше исключение.

  • 0
    как мы можем помешать Джексону думать, что String является base64?
0

Попробуйте добавить специальный сеттер для поля data:

void setData(String data) { this.data = data.getBytes(); }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню