Невозможно десериализовать экземпляр java.lang.String из маркера START_OBJECT String.class - PullRequest
0 голосов
/ 03 сентября 2018

Я впервые столкнулся с использованием ObjectMapper с String.class. Я попытался указать в качестве строки json, для которого получено исключение JsonMappingException. Не могли бы вы помочь понять, почему?

public static void main(String args[]) throws JsonParseException, JsonMappingException, IOException{
       String response="{\"response\":\"success\"}";
       ObjectMapper objectMapper = new ObjectMapper();
        Object object = objectMapper.readValue(response, String.class);
        System.out.println(object);
   }

Ответ:

Исключение в теме "главная" com.fasterxml.jackson.databind.JsonMappingException: не может десериализовать экземпляр java.lang.String из токена START_OBJECT в [Источник: {"response": "success"}; строка: 1, столбец: 1] в com.fasterxml.jackson.databind.JsonMappingException.from (JsonMappingException.java:270) в com.fasterxml.jackson.databind.DeserializationContext.reportMappingException (DeserializationContext.java:1234) в com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken (DeserializationContext.java:1122) в com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken (DeserializationContext.java:1075) в com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize (StringDeserializer.java:60) в com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize (StringDeserializer.java:11) в com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose (ObjectMapper.java:3814) в com.fasterxml.jackson.databind.ObjectMapper.readValue (ObjectMapper.java:2858)

В течение всего испытания, когда я передаю ответ как «успех», я получаю:

Исключение в теме "главная" com.fasterxml.jackson.core.JsonParseException: нераспознанный токен 'success': ожидал ('true', 'false' или 'null')

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Правильный путь - читать его как дерево :

ObjectMapper om = new ObjectMapper();
JsonNode tree = om.readTree("{\"response\":\"success\"}");
String response = tree.get("response").asText();
System.out.println(response);

выходы: success

0 голосов
/ 03 сентября 2018

Поскольку вы передали пару json, где response - это имя поля, а success - значение для этого поля, вам необходимо создать класс ResponseDTO

public class ResponseDto { private String response; //getter/setter here

и

 Object object = objectMapper.readValue(response, ResponseDTO.class);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...