我想看到这样的东西
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。
如果只需要一个序列化器,则需要自定义序列化。