我正在使用Jackson JSON库将一些JSON对象转换为android应用程序上的POJO类。问题是,JSON对象可能会发生变化,并在应用程序发布时添加了新的字段,但目前它将在添加简单的String字段时中断,可以安全地忽略它。
有没有办法告诉Jackson忽略新添加的字段?(例如在POJO对象上不存在)?全球无视会很好。
我正在使用Jackson JSON库将一些JSON对象转换为android应用程序上的POJO类。问题是,JSON对象可能会发生变化,并在应用程序发布时添加了新的字段,但目前它将在添加简单的String字段时中断,可以安全地忽略它。
有没有办法告诉Jackson忽略新添加的字段?(例如在POJO对象上不存在)?全球无视会很好。
当前回答
最新和完整的回答与杰克逊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。
其他回答
@JsonIgnoreProperties(ignoreUnknown = true) 对我来说很管用。我有一个运行在tomcat上的java应用程序,使用jdk 1.7。
我使用的是jackson-xxx 2.8.5。Maven依赖关系:
<dependencies>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>
首先,如果你想忽略全局的未知属性。您可以配置ObjectMapper。 像下图:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
如果你想忽略一些类,你可以在你的类上添加注释@JsonIgnoreProperties(ignoreUnknown = true):
@JsonIgnoreProperties(ignoreUnknown = true)
public class E1 {
private String t1;
public String getT1() {
return t1;
}
public void setT1(String t1) {
this.t1 = t1;
}
}
最新和完整的回答与杰克逊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。
如果使用基于JSON响应的pojo类。如果有机会在pojo类级别频繁声明json更改:
@JsonIgnoreProperties(ignoreUnknown = true)
在objectMapper中,如果你正在转换,添加这个:
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
这样密码就不会被破解。
确保将@JsonIgnoreProperties(ignoreUnknown = true)注释放置到解析JSON响应后希望填充的父POJO类中,而不是将JSON转换为Java对象的类中。