当前位置: 首页 > 面试题库 >

POST / PUT期间将所有对象作为其ID的单个自定义反序列化器或嵌入的整个对象

祁高格
2023-03-14
问题内容

@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为属性的所有可能对象起作用

谢谢!


问题答案:

@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的帖子 <代码>{名称:“名称”,类别:2,次要类别:[3,4,5]}来自客户端 并且能够像这样反序列化: 如果它是作为 我希望它还能像现在一样工作 我需要什么样的注释和自定义反序列化器?希望反序列化器可以用于所有可能的id为属性的对象 谢啦! 编辑 查看首选zafrost的答案(https://stackoverflow.com/a/46618366/98

  • 使用杰克逊( 数据: 数据模型: 我当前的反序列化器如下所示: 注意:我的问题被定义为Scala,但我认为Java的方法足够相似,以至于无关紧要。所以Java的答案是可以接受的。

  • 问题内容: 我需要反序列化json,它是日期/长值的数组。这是返回的JSON的示例: 使用GSON,我可以将其反序列化为,但希望能够将其转换为类似以下内容的方法: 我似乎找不到一种方法来指示GSON将JSON映射的键/值映射到我的自定义类中的日期/值字段。有没有办法做到这一点,还是地图列表是唯一的路线? 问题答案: 您需要编写一个自定义解串器。您还需要使用可以实际解析的时区格式。无论是也将匹配,这

  • 问题内容: 确定,所以我编辑了问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,这些文件有点太复杂了。我不想让我的对象结构太沉重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中,我有以下内容: 我不想保留我当前的对象结构,即一个对象,其中包含一个和一个“总计”。但是我只想将

  • 我使用NewtonSoft.json来反序列化这个json