hibernate 如何发送以钥匙为对象的 Postman Map?

p5fdfcr1  于 2023-01-26  发布在  Postman
关注(0)|答案(1)|浏览(145)

我有这样一个实体结构,所以我想发送一个后请求,并创建所有属性的顺序。如何请求身体应该看起来像 Postman ?

@Entity
public class Order {
    @Id int id;

    String name;

    @ElementCollection
    @CollectionTable(name="INVENTORY", joinColumns=@JoinColumn(name="STORE"))
    @Column(name="COPIES_IN_STOCK")
    @MapKeyJoinColumn(name="MOVIE", referencedColumnName="ID")
    Map<Item, Integer> items;
 
}

@Entity
public class Item {
    @Id long id;
    String name;

}
@RestController
@RequestMapping("api/v1/order")
public class OrderController {

    public final OrderService orderService;

    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }
    @PostMapping
    public void saveOrder(@RequestBody Order order){
         orderService.save(order);
    }
}

这是错误的主体,因此我尝试根据我的数据模型找出它应该是什么样子

{
     "name":"first order",
     "items": {
         "item-1":{
              "name": "frist item"  
         },
         "item-2":{
             "name": "second item"  
         }
     }
}

我期望得到从客户端收到的订单的状态与整个结构
here数据中获得的示例screenshot

eulz3vhy

eulz3vhy1#

我认为@RequestBody在默认情况下无法处理此示例请求:

{
     "name":"first order",
     "items": {
         "item-1":{
              "name": "frist item"  
         },
         "item-2":{
             "name": "second item"  
         }
     }
}

为此,你应该尝试这样的东西:

@Entity
public class Order {
    @Id int id;

    String name;

    @ElementCollection
    @CollectionTable(name="INVENTORY", joinColumns=@JoinColumn(name="STORE"))
    @Column(name="COPIES_IN_STOCK")
    @MapKeyJoinColumn(name="MOVIE", referencedColumnName="ID")
    Map<Item, Integer> items;
 
    @JsonAnySetter
    public void addItems(String key, Item item) {
        items.put(item, Integer.valueOf(key.split("-")));
    }
    
}

如果您想将项目的重复次数作为散列表中的键进行计数,请将您的逻辑放在这个setter中

相关问题