Mic*_*dis 5 spring json jackson spring-data spring-data-jpa
@Entity
public Product {
@Id
public int id;
public String name;
@ManyToOne(cascade = {CascadeType.DETACH} )
Category category
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH} )
Set<Category> secondaryCategories;
}
Run Code Online (Sandbox Code Playgroud)
和这个实体:
@Entity
public Category {
@Id
public int id;
public String name;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够使用 json 发送 POST
{ name: "name", category: 2, secondaryCategories: [3,4,5] }从客户端
并且能够像这样反序列化:
{ name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, {id: 4}, {id: 5}] }
Run Code Online (Sandbox Code Playgroud)
如果它被发送为
{ name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, {id: 4}, {id: 5}] }
Run Code Online (Sandbox Code Playgroud)
我希望它仍然像现在一样工作
我需要什么样的注释和自定义反序列化器?希望反序列化器可以适用于所有可能具有 id 作为属性的对象
谢谢!
编辑
@JsonCreator答案(/sf/answers/3263285651/)StdDeserializer和使用默认反序列化ObjectMapper小智 2
@JsonCreator如果您可以修改实体,另一种方法是使用工厂方法
private class Product {
@JsonProperty("category")
private Category category;
@JsonProperty("secondaryCategories")
private List<Category> secondaryCategories;
}
private class Category {
@JsonProperty("id")
private int id;
@JsonCreator
public static Category factory(int id){
Category p = new Category();
p.id = id;
// or some db call
return p;
}
}
Run Code Online (Sandbox Code Playgroud)
或者甚至像这样的东西也应该起作用
private class Category {
private int id;
public Category() {}
@JsonCreator
public Category(int id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |