杰克逊 - 动态地抑制属性的序列化(写入)

时间:2010-06-05 17:36:39

标签: java json 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

4 个答案:

答案 0 :(得分:4)

是的,JSON View是要走的路。

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

答案 1 :(得分:2)

检查

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

org.codehaus.jackson.annotate.JsonIgnore 

注释

只有当您希望某个类型的所有实例都忽略序列化时的id时,这才有效。如果你真的想要动态(也就是每个实例定制)你可能会自己破解杰克逊图书馆。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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