You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:57:07