jackson – 动态地抑制属性的序列化(写入)

我正在尝试使用Jackson将Java对象转换为Tomcat / jersey中的JSON对象。 并希望动态地抑制某些属性的序列化(写入)。

我可以使用JsonIgnore,但我想在运行时做出忽略决定。 有任何想法吗??

因此,作为下面的示例,当我将User对象序列化为JSON时,我想要禁止“id”字段。

new ObjectMapper.writeValueAsString(user); class User { private String id = null; private String firstName = null; private String lastName = null; //getters //setters }//end class 

是的,JSON View是要走的路。

如果你需要让客户决定编组哪些字段,这个例子可能会有所帮助: http : //svn.codehaus.org/jackson/tags/1.6/1.6.3/src/sample/CustomSerializationView.java

检查

 ObjectMapper.configure(SerialiationJson.Feature f, boolean value) 

 org.codehaus.jackson.annotate.JsonIgnore 

注解

仅当您希望某个类型的所有实例在序列化时忽略id时,此方法才有效。 如果你真的想要动态(也就是每个实例定制),你可能需要自己破解jackson图书馆。

我认为没有办法做到这一点。 如果您需要动态决定编组哪些属性,那么我建议您手动构建一个键值Map到对象的值,然后将该Map传递给Jackson,而不是直接传递User对象。

您是否尝试过使用JSON视图 ? 视图允许基于注释的机制来定义不同的配置文件,因此如果您只需要针对不同用户略微不同的视图,这可能对您有用。