У меня есть следующий JSON:
{"beans":["{}",{"name":"Will"}]}
и соответствующие классы POJO:
public class BeanA {
private BeanB[] beans;
...getters/setters
}
public class BeanB {
private String name;
...getters/setters
}
Я хотел бы, чтобы Джексон десериализовал BeanA с массивом BeanB, первый элемент был бы просто экземпляром BeanB, а второй - экземпляром BeanB с набором свойств имени.
Я создал исходную строку, сериализовав это:
BeanA beanA = new BeanA();
BeanB beanB = new BeanB();
beanB.setName("Will");
beanA.setBeans(new BeanB[] {new BeanB(), beanB});
Вот моя полная конфигурация для objectMapper:
this.objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
this.objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
Ошибка, которую я получаю, заключается в следующем:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `BeanB` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{}')
{"beans":[{},{"name":"Will"}]}
без кавычек вокруг{}
? - person Andreas   schedule 04.10.2017BeanA beanA = this.objectMapper.readValue(json, BeanA.class)
не работает? - person Luciano van der Veekens   schedule 04.10.2017readValue()
, показанный Лучано ван дер Викенс работает нормально, если вы измените"{}"
на{}
. - person Andreas   schedule 04.10.2017