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



我有一些bean,它们(显式)为JSon中的核心数据类型建模。然而,有时Jsons在阅读中会有额外的数据。

有没有一种方法可以在jackson中注释/定义Bean,使其为一些字段(例如我所知道的字段)使用显式字段名,同时将额外的字段填充到映射/列表中?

是的,假设你真的想保留所有额外的/无法识别的参数,那么就这样做:

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);
    }
}

要配置参数的全局处理,您可以选择定义DeserializationProbemHandler的实现,并使用ObjectMapper配置全局注册它。

DeserializationProblemHandler handler = new MyDeserializationProblemHandler();
ObjectMapper.getDeserializationConfig().addHandler(handler);

如果你发现你真的不在乎未知参数,那么你可以简单地关闭它们。在每个类的基础上使用@JsonIgnoreProperties(ignoreUnknown=true),或者全局配置ObjectMapper:

objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)

最新更新