我正在使用Jackson JSON库将一些JSON对象转换为android应用程序上的POJO类。问题是,JSON对象可能会发生变化,并在应用程序发布时添加了新的字段,但目前它将在添加简单的String字段时中断,可以安全地忽略它。
有没有办法告诉Jackson忽略新添加的字段?(例如在POJO对象上不存在)?全球无视会很好。
我正在使用Jackson JSON库将一些JSON对象转换为android应用程序上的POJO类。问题是,JSON对象可能会发生变化,并在应用程序发布时添加了新的字段,但目前它将在添加简单的String字段时中断,可以安全地忽略它。
有没有办法告诉Jackson忽略新添加的字段?(例如在POJO对象上不存在)?全球无视会很好。
当前回答
可以通过两种方式实现:
将POJO标记为忽略未知属性 @JsonIgnoreProperties(ignoreUnknown = true) 配置ObjectMapper序列化/反序列化POJO/json,如下所示: ObjectMapper mapper =new ObjectMapper(); // Jackson版本1。X mapper.configure (DeserializationConfig.Feature。FAIL_ON_UNKNOWN_PROPERTIES、假); // Jackson版本2。X mapper.configure (DeserializationFeature。FAIL_ON_UNKNOWN_PROPERTIES假)
其他回答
最新和完整的回答与杰克逊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。
Jackson提供了一个可以在类级别上使用的注释(JsonIgnoreProperties)。
将以下内容添加到类的顶部(而不是单个方法):
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
...
}
根据你正在使用的jackson版本,你必须在当前版本中使用不同的导入:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
在较旧的版本中,它是:
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
如果使用基于JSON响应的pojo类。如果有机会在pojo类级别频繁声明json更改:
@JsonIgnoreProperties(ignoreUnknown = true)
在objectMapper中,如果你正在转换,添加这个:
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
这样密码就不会被破解。
您可以使用@JsonIgnore在POJO中注释特定的属性。
可以通过两种方式实现:
将POJO标记为忽略未知属性 @JsonIgnoreProperties(ignoreUnknown = true) 配置ObjectMapper序列化/反序列化POJO/json,如下所示: ObjectMapper mapper =new ObjectMapper(); // Jackson版本1。X mapper.configure (DeserializationConfig.Feature。FAIL_ON_UNKNOWN_PROPERTIES、假); // Jackson版本2。X mapper.configure (DeserializationFeature。FAIL_ON_UNKNOWN_PROPERTIES假)