Java Jackson:避免由于未建模字段而导致的异常

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

我有一些bean,它们(显式地)在JSon中建模核心数据类型。然而,有时im读取的JSON中有额外的数据


有没有一种方法可以在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)