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视图 ? 视图允许基于注释的机制来定义不同的配置文件,因此如果您只需要针对不同用户略微不同的视图,这可能对您有用。