【发布时间】:2018-03-16 05:40:08
【问题描述】:
我有以下 JSON:
{"beans":["{}",{"name":"Will"}]}
以及对应的POJO类:
public class BeanA {
private BeanB[] beans;
...getters/setters
}
public class BeanB {
private String name;
...getters/setters
}
我希望 jackson 使用 BeanB 数组反序列化为 BeanA,第一个元素将只是 BeanB 的一个实例,第二个元素是具有 name 属性集的 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 ('{}')
【问题讨论】:
-
"{}"或{}? -
那个 JSON 有一个混合内容数组,其中第一个元素是字符串,第二个元素是对象。你的意思是
{"beans":[{},{"name":"Will"}]},没有{}周围的引号? -
这里有什么问题?
BeanA beanA = this.objectMapper.readValue(json, BeanA.class)不行吗? -
您的问题是什么?假设您将
"{}"更改为{},那么非常简单的readValue()call shown by Luciano van der Veekens 工作正常。 -
对不起,我意识到有一个拦截器使用 String.valueOf 将 json 的值转换为字符串
标签: java json objectmapper jackson2