如何在Postman中构造以对象为键的Map请求体创建Order
正确的Order创建请求体格式(适配JPA Map<Item, Integer>结构)
你的请求体错误在于颠倒了Map的键值对应关系:实体Order的items是Map<Item, Integer>,即键为Item实体、值为整数类型的库存数量,而你之前的写法把自定义字符串作为键、Item作为值,完全不符合实体定义。
根据你的JPA映射配置(@MapKeyJoinColumn关联Item的ID),分两种场景给出正确请求体:
场景1:关联已存在的Item(推荐)
如果数据库中已有Item记录,直接用Item的ID作为Map的键,值为对应库存数量:
{ "id": 1, "name": "first order", "items": { "1": 5, "2": 3 } }
"1"、"2"是数据库中已存在的Item的ID- 对应的值是该Item的库存数量(Integer类型)
场景2:创建新Item并关联到Order
若需同时创建新Item,需先给Order的items字段添加级联持久化配置:
@ElementCollection(cascade = CascadeType.PERSIST) @CollectionTable(name="INVENTORY", joinColumns=@JoinColumn(name="STORE")) @Column(name="COPIES_IN_STOCK") @MapKeyJoinColumn(name="MOVIE", referencedColumnName="ID") Map<Item, Integer> items;
此时请求体需将Item的完整JSON序列化字符串作为Map的键,值为库存数量:
{ "id": 1, "name": "first order", "items": { "{\"id\": 1, \"name\": \"first item\"}": 5, "{\"id\": 2, \"name\": \"second item\"}": 3 } }
注意:这种方式依赖Jackson对实体键的序列化逻辑,体验较差,更建议先独立创建
Item,再用场景1的方式关联。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

