我有JSON反序列化的这个特定问题。让我们有这个JSON结构:
{
"header":{
"objects":[
{"field":"value1"},
{"field":"value2"}
]
}
}
JSON结构不能改变,因为它来自第三方系统。
现在让我们来看看这个简单的POJO:
@JsonDeserialize(using=PojoDeserializer.class)
public class Pojo {
private string field;
//...getter, setter
}
提到的PojoDeserializer使用{“field”:“value”} json字符串并将其反序列化为Pojo实例。所以我可以像这样简单地进行反序列化
Pojo instance = new 。ObjectMapper()readValue( “{\” 字段\“: \“value \”}“,Pojo.class);
这是我的问题。让我们有另一个反序列化器PojosCollectionDeserializer,它接受上面提到的结构并将其反序列化为Pojo实例的Collection。我想以与前一个例子类似的方式使用它:
Collection<Pojo> pojos = new ObjectMapper().readValue("{...}", Collection.class);
但这不起作用,因为没有定义使用PojosCollectionDeserializer创建Collection。有没有办法实现它?
答案 0 :(得分:2)
我不确定为什么要尝试明确指定反序列化器,因为它们都能正常工作:
public class Message {
public Header header; // or, if you prefer, getter and setter
}
public class Header {
public List<Pojo> objects;
}
public class Pojo {
public String field;
}
Message msg = objectMapper.readValue(json, Message.class);
没有任何其他配置或注释。对于像这样的简单情况,不需要构造自定义序列化器或反序列化器。