2010-06-05 33 views
10

我想将java对象转换为使用Jackson的Tomcat/jersey中的JSON对象。并且想要动态地抑制某些属性的序列化(写入)。杰克逊 - 动态抑制属性的序列化(写)

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

所以下面一个例子,我希望当我序列化用户对象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

我看不出这样做的任何方式。如果您需要动态决定编组哪些属性,那么我建议您手动为您的对象构造键的值,然后将该Map传递给Jackson,而不是直接传递User对象。

+0

谢谢。在创建JSON数组时,我认为Map模式也有点弱。 Map map1 = new HashMap (); map1.put(“fname”,“Steve”); map1.put(“lname”,“Colly”); \t \t Map map2 = new HashMap (); map2.put(“fname”,“Josh”); map2.put(“lname”,“Roff”); List jsonArray = new ArrayList(); jsonArray.add(map1); jsonArray.add(map2); new ObjectMapper()。writeValueAsString(jsonArray) ...不产生??? {{'fname':'Steve','lname':'Colly'},{'fname':'Josh','lname':'Roff'}] – kapso 2010-06-05 18:22:47

+0

@ kapil.isr:是的,I刚刚尝试过,它工作正常。键的顺序是不同的,但这是因为你使用了“HashMap”而不是“LinkedHashMap”。 – skaffman 2010-06-05 18:35:30

+0

o是的,它的工作,对不起错字:)感谢很多! – kapso 2010-06-05 18:40:04

2

检查

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

org.codehaus.jackson.annotate.JsonIgnore 

注释

当你想要某种类型的所有实例都忽略序列号这只会工作。如果你真的想要动态的(又称每个实例定制),你可能会自己破解杰克逊库。

0

您是否尝试过使用JSON Views? 视图允许基于注解的机制来定义不同的配置文件,所以如果你只是需要对不同的用户有不同的视图,这可能适用于你。