我正在使用Jackson JSON库将一些JSON对象转换为android应用程序上的POJO类。问题是,JSON对象可能会发生变化,并在应用程序发布时添加了新的字段,但目前它将在添加简单的String字段时中断,可以安全地忽略它。

有没有办法告诉Jackson忽略新添加的字段?(例如在POJO对象上不存在)?全球无视会很好。


当前回答

从Jackson 2.4及以上版本开始,有了一些变化。 下面是你现在该怎么做:

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

..........................................................................

 ObjectMapper mapper = new ObjectMapper();
    // to prevent exception when encountering unknown property:
 mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

注意:基于@annotation的解决方案保持不变,所以如果你喜欢使用它,请参阅其他答案。

有关更多信息,请参阅10分钟配置教程:https://github.com/FasterXML/jackson-databind

其他回答

除了前面提到的2种机制外,还有一个全局特性可以用来抑制由未知(未映射)属性引起的所有故障:

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

这是在没有注释的情况下使用的默认值,可以方便地进行回退。

从Jackson 2.4及以上版本开始,有了一些变化。 下面是你现在该怎么做:

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

..........................................................................

 ObjectMapper mapper = new ObjectMapper();
    // to prevent exception when encountering unknown property:
 mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

注意:基于@annotation的解决方案保持不变,所以如果你喜欢使用它,请参阅其他答案。

有关更多信息,请参阅10分钟配置教程:https://github.com/FasterXML/jackson-databind

如果使用基于JSON响应的pojo类。如果有机会在pojo类级别频繁声明json更改:

@JsonIgnoreProperties(ignoreUnknown = true)

在objectMapper中,如果你正在转换,添加这个:

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

这样密码就不会被破解。

@JsonIgnoreProperties(ignoreUnknown = true) 对我来说很管用。我有一个运行在tomcat上的java应用程序,使用jdk 1.7。

Jackson提供了一个可以在类级别上使用的注释(JsonIgnoreProperties)。

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

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

根据你正在使用的jackson版本,你必须在当前版本中使用不同的导入:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

在较旧的版本中,它是:

import org.codehaus.jackson.annotate.JsonIgnoreProperties;