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>和其他子属性可以安全地忽略。

我还不太熟悉Jackson,发现只有@JsonIgnore可以挽救,但这样我就永远失去了所有的@JsonIgnored属性。有没有一种优雅的方法来解决这个问题?

注意:我使用Hibernate JPA,所以在我的模型类中有很多关系,有深度的关系链,甚至循环引用,所以一个完整的JSON序列化总是会导致地狱…我谷歌到@JsonManagedRef和朋友,但这只解决循环问题,并导致大量的配置和不是很好读。

发现只有@JsonIgnore来拯救,但这样我将永远失去所有的@JsonIgnore属性

由此我理解,您希望仅在序列化User时才忽略不需要的Company属性,而不是在序列化Company时应发生的情况,例如直接。

如果可以使用不同的序列化器实例,即两个不同的ObjectMapper实例,那么在序列化User时,解决这个问题的一种方法是使用mix-in来适当地应用@JsonIgnore。然后,在序列化Company时,不要使用相同的序列化器和mix-in。

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

最新更新