单个自定义序列化程序,用于所有嵌入的带注释的对象,用它们的id替换它们
我有这样的实体:
@Entity public Product { @Id public int id; public String name; @ManyToOne(cascade = {CascadeType.DETACH} ) Category category @ManyToMany(cascade = {CascadeType.DETACH} ) Set secondaryCategories; }
和
@Entity public Category { @Id public int id; public String name; @JsonCreator public Category(int id) { this.id = id; } public Category() {} }
是否可以使用注释来注释Category
类或category
和secondaryCategories
属性,这些注释将它们序列化为嵌入时的ID。
现在,当我为id = 1的产品进行GET时,我从服务器获取:
{ id: 1, name: "product 1", category: {id: 2, name: "category 2" }, secondaryCategories: [{id: 3, name: "category 3" }, {id: 4, name: "category 4" }, {id: 5, name: "category 5" }] }
有可能回来:
{ id: 1, name: "product 1", category: 2, secondaryCategories: [3, 4, 5] }
使用@JsonIdentityReference(alwaysAsId = true)
注释Category
类通常可以正常工作,但在我获取一个或一个类别列表时也只返回id。 我只在嵌入Category时才需要id转换。
谢谢!
您只需要对类别变量使用@JsonIdentityReference(alwaysAsId = true)
。
例如:
@Entity public Product { @Id public int id; public String name; @ManyToOne(cascade = {CascadeType.DETACH} ) @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope=Category.class) @JsonIdentityReference(alwaysAsId = true) Category category; @ManyToMany(cascade = {CascadeType.DETACH} ) Set secondaryCategories; }
- Jackson多态性:如何将多个子类型映射到同一个类
- 在jackon JSON库中ALLOW_UNQUOTED_FIELD_NAMES
- 如何使用JAXB使用Jersey 1.6生成JSON输出
- Spring @JsonIgnore无法正常工作
- 当jackson反序列化失败时,Jerseyexception映射器无法正常工作
- Json Mapping Exception无法反序列化START_ARRAY令牌中的实例
- Jackson json双向对象参考
- 从POJO生成Json Schema
- JsonMappingException:无法从START_OBJECT标记中反序列化java.lang.Integer的实例