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