Spring Boot+Hibernate中@ManyToOne关联引发Jackson反序列化错误
Spring Boot鞋店应用POST/PUT请求415错误问题
我基于Spring Boot + Hibernate + PostgreSQL开发鞋店应用,其中Good(商品)与Manufacturer(厂商)为一对多关联关系。测试Controller时,通过Postman发送POST/PUT请求出现415错误,Jackson报错提示无法处理managed/back reference,back reference类型(java.util.List<com.velov.shoeshop.entities.Good>)与managed类型(com.velov.shoeshop.entities.Good)不兼容。已尝试使用@JsonIdentityInfo注解及修改JSON请求体,但问题仍未解决。
相关代码
Good实体类
@Entity @Table(name = "goods") public class Good { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private int Id; @Column(name = "Title") private String title; @Enumerated(EnumType.STRING) @Column(name = "sex") private sexType sexType; /** * 已验证,此关联可正常工作! */ @JsonManagedReference @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.REFRESH, CascadeType.MERGE}) @JoinColumn(name = "ManufacturerId") Manufacturer manufacturer; //多个商品可关联同一个厂商 @JsonManagedReference @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.REFRESH, CascadeType.MERGE}, mappedBy = "good")//与尺码列表的单向关联 List<Size> sizes; }
Manufacturer实体类
@Entity @Table(name = "manufacturers") public class Manufacturer { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private int Id; @Column(name = "ManufacturerName") private String manufacturerName; @Column(name = "Address") private String address; @Column(name = "Telephone") private String telephone; @JsonBackReference @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.REFRESH, CascadeType.MERGE}, mappedBy = "manufacturer") private List<Good> goods; }
REST Controller代码
@RestController @RequestMapping("/api") public class MyRESTController { @Autowired private GoodService goodService; @GetMapping("/goods") public List<Good> showAllGoods() { List<Good> allGoods = goodService.getAllGoods(); return allGoods; } @PostMapping("/goods") public Good addNewGood(@RequestBody Good good) { goodService.saveGood(good); return good; } @PutMapping("/goods") public Good updateGood(@RequestBody Good good) { goodService.saveGood(good); return good; } @DeleteMapping("/goods/{id}") public String deleteGood(@PathVariable int id) { goodService.deleteGood(id); return "ID为" + id + "的商品已删除"; } }
请求JSON示例
[ { "title": "Dean", "sexType": "MAN", "manufacturer": { "id": 1, "manufacturerName": "Ralf", "address": "莫斯科", "telephone": "9-999-999-99-99" }, "sizes": [ { "id": 3, "size": 42, "quantity": 6 }, { "id": 4, "size": 45, "quantity": 2 } ], "id": 5 } ]
Postman返回错误信息
{ "timestamp": "2023-04-07T15:02:08.771+00:00", "status": 415, "error": "不支持的媒体类型", "path": "/api/goods" }
内容的提问来源于stack exchange,提问作者velovatik
相关产品推荐
相关产品推荐

