Java Jackson:避免由于未建模字段而导致的异常
我有一些bean,它们(显式地)在JSon中建模核心数据类型。然而,有时im读取的JSON中有额外的数据Java Jackson:避免由于未建模字段而导致的异常,java,json,javabeans,jackson,Java,Json,Javabeans,Jackson,我有一些bean,它们(显式地)在JSon中建模核心数据类型。然而,有时im读取的JSON中有额外的数据 有没有一种方法可以在jackson中注释/定义Bean,以便它在将额外字段塞进map/列表的同时,为某些字段(例如我所知道的字段)使用显式字段名 是的,如果您真的想保留所有额外/无法识别的参数,请执行以下操作: public class MyBean { private String field1; private String field2; private Int
有没有一种方法可以在jackson中注释/定义Bean,以便它在将额外字段塞进map/列表的同时,为某些字段(例如我所知道的字段)使用显式字段名 是的,如果您真的想保留所有额外/无法识别的参数,请执行以下操作:
public class MyBean {
private String field1;
private String field2;
private Integer field3;
private Map <String, Object> unknownParameters ;
public MyBean() {
super();
unknownParameters = new HashMap<String, Object>(16);
}
// Getters & Setters here
// Handle unknown deserialization parameters
@JsonAnySetter
protected void handleUnknown(String key, Object value) {
unknownParameters.put(key, value);
}
}
如果您发现自己确实不关心未知参数,那么只需将其关闭即可。使用@JsonIgnoreProperties(ignoreUnknown=true)按类计算,或通过配置ObjectMapper全局计算:
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)
谢谢-如果参数不是键值比较,该怎么办?也就是说,如果输入是一个列表呢?我可以使用Object[]作为@JsonAnySetter方法的输入参数吗?任何nn原语都可以作为键值对中的值存储。唯一需要注意的是,在以后从地图检索时,您必须知道密钥的类型。
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)