jackson序列化,是否有一个注释,指示要用于属性的子属性?

时间:2011-10-13 15:57:17

标签: java json serialization annotations jackson

我想看到类似的东西

class User {
   @JsonMask({"name", "address"})
   private Company company;
   private String name;
   //...
}
class Company {
   private String name;
   private String address;
   private Set<User> employers;
   //...
}

当用户序列化时,输出应为

{"name": "Mike", "company": {"name": "Enterprise Co.Ltd", "address": "....." }}

并且可以安全地忽略昂贵的部分Set<User>和其他子属性。

我对杰克逊还不是很熟悉,只发现了@JsonIgnore,但是我会永远失去所有这些@JsonIgnored属性。有没有一种优雅的方法来解决这个问题?

注意:我正在使用Hibernate JPA,所以在我的Model类中有很多关系,有很深的关系链甚至是循环引用,所以完整的JSON序列化总会导致地狱......我用Google搜索了@JsonManagedRef和朋友,但这只能解决循环问题,并导致很多配置,并且不太可读。

1 个答案:

答案 0 :(得分:0)

  

只找到@JsonIgnore救援,但后来我将永远失去所有@JsonIgnored属性

据我所知,您希望仅在序列化Company时忽略不需要的User属性,而不是在序列化Company时应该发生的情况。直接

如果可以使用不同的序列化程序实例,即两个不同的ObjectMapper个实例,那么在序列化User时,解决此问题的一种方法是使用mix-in来应用@JsonIgnore视情况而定。然后在序列化Company时不要使用相同的序列化程序和混合。

如果只需要一个序列化程序,则需要自定义序列化。