У меня есть следующие 2 класса:
@JsonIgnoreProperties(ignoreUnknown = true)
public class ChangesJSON {
@JsonProperty("changes")
List<ChangeJSON> changes;
@JsonProperty("more")
Boolean more;
}
public class ChangeJSON {
@JsonProperty("epoch")
Long epoch;
@JsonProperty("payload")
Map<String, Object> payload;
}
Когда я пытаюсь десериализовать этот тест:
String test = "{\"changes\":[{\"epoch\":1441556306522,\"payload\":\"{\"to\":1}\"},{\"epoch\":1441555481524,\"payload\":\"{\"to\":-1}\"}],\"more\":false}";
@Test
public void myTest() {
ObjectMapper mapper = new ObjectMapper();
ChangesJSON result = null;
try {
result = mapper.readValue(test, ChangesJSON.class);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
assertNotNull(result);
}
Я получаю следующее исключение:
com.fasterxml.jackson.databind.JsonMappingException: невозможно создать экземпляр значения типа java.util.LinkedHashMap из значения String ('{'); нет однострочного конструктора/фабричного метода в [Источник: {"changes":[{"epoch":1441556306522,"payload":"{"to":1}"},{"epoch":1441555481524,"payload" :"{"to":-1}"}],"more":false}; строка: 1, столбец: 35] (через цепочку ссылок: demo.ChangesJSON["changes"]->java.util.ArrayList[0]->demo.ChangeJSON["payload"])
Кажется, есть проблема с картой, но я подумал, что Джексон должен уметь работать с картами. У меня возникает такая же проблема, когда я меняю карту на карту. Но мне нужно поддерживать всевозможные классы в качестве значений карты.
"payload": "{"to":1}"}
вместо"payload": {"to":1}}
- person JB Nizet   schedule 07.09.2015