使用Jackson忽略JSON对象上的新字段

我使用Jackson JSON库将一些JSON对象转换为android应用程序上的POJO类。 问题是,JSON对象可能会更改,并且在应用程序发布时添加新的字段,但是当前,即使添加了简单的字符串字段,它也会中断,这可以安全地忽略。

有什么办法可以告诉杰克逊忽略新增的字段吗? (例如POJO对象上不存在)? 全球忽视会很好。


Jackson提供了一个可以在课堂上使用的注释(JsonIgnoreProperties)。

将以下内容添加到班级的顶部(而不是单个方法):

@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
    ...
}

根据您使用的杰克逊版本,您将不得不在当前版本中使用不同的导入:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

在旧版本中它一直是:

import org.codehaus.jackson.annotate.JsonIgnoreProperties;

另外还有两个已经提到的机制,还有全局特征可以用来抑制由未知(未映射)属性引起的所有故障:

// jackson 1.9 and before
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// or jackson 2.0
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

这是没有注释时使用的默认值,可以是方便的回退。


杰克逊2最新的完整答案


使用注释

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyMappingClass {

}

请参阅Jackson在线文档上的JsonIgnoreProperties。

使用配置

比注解更少侵入。

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

ObjectReader objectReader = objectMapper.reader(MyMappingClass.class);
MyMappingClass myMappingClass = objectReader.readValue(json);

请参阅Jackson在线文档上的FAIL_ON_UNKNOWN_PROPERTIES。

链接地址: http://www.djcxy.com/p/6453.html

上一篇: Ignoring new fields on JSON objects using Jackson

下一篇: Is there any practical reason to use quoted strings for JSON keys?