gpt4 book ai didi

json - 所有对象的单个自定义反序列化器作为它们的 ID 或在 POST/PUT 期间嵌入整个对象

转载 作者:行者123 更新时间:2023-12-05 01:19:54 25 4
gpt4 key购买 nike

@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;


}

和这个实体:
@Entity
public Category {
@Id
public int id;

public String name;
}

我希望能够用 json 发送 POST
{ name: "name", category: 2, secondaryCategories: [3,4,5] }从客户端

并且能够像这样反序列化:
{ name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, {id: 4}, {id: 5}] }

如果它被发送为
 { name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, {id: 4}, {id: 5}] }

我希望它仍然像现在一样工作

我需要什么样的注释和自定义反序列化器?希望反序列化器可以适用于所有可能将 id 作为属性的对象

谢谢!

编辑
  • 查看首选zafrost的@JsonCreator回答 ( https://stackoverflow.com/a/46618366/986160 )
  • 请参阅我的完整答案 ( https://stackoverflow.com/a/46618193/986160 ) 以扩展 StdDeserializer并通过 ObjectMapper 使用默认反序列化
  • 最佳答案

    另一种方法是使用 @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;
    }
    }

    或者甚至像这样的东西也应该工作
    private class Category {
    private int id;

    public Category() {}

    @JsonCreator
    public Category(int id) {
    this.id = id;
    }
    }

    关于json - 所有对象的单个自定义反序列化器作为它们的 ID 或在 POST/PUT 期间嵌入整个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46603075/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com