有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 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和friend,但这只解决了循环问题,导致了大量配置,可读性不强


共 (1) 个答案

  1. # 1 楼答案

    found only @JsonIgnore to the rescue, but then I would lose all those @JsonIgnored properties for ever

    通过这一点,我理解您希望仅在序列化User时忽略不需要的Company属性,而不是直接序列化Company时应该发生的情况

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

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