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

Spring Boot Data JPA多对多关系下POST请求返回404错误

多对多关联添加后POST请求返回404的解决方法

核心原因及解决方案

1. 双向多对多引发循环序列化异常

User与Contest的双向多对多关联会导致Jackson序列化时陷入无限递归:User包含Contest列表,Contest又反向包含User列表,最终触发服务器内部错误,可能被错误显示为404。

修复方式:
在双向关联的任意一侧添加@JsonIgnore注解阻断循环:

// 修改Contest实体的users字段
@ManyToMany(mappedBy = "contests")
@JsonIgnore
private List<User> users;

或者:

// 修改User实体的contests字段
@ManyToMany
@JsonIgnore
private List<Contest> contests;

2. 全参构造函数导致反序列化失败

User实体的@AllArgsConstructor包含了contests列表参数,但你的POST请求JSON中未提供该字段,Jackson尝试通过全参构造实例化User时会因参数缺失抛出异常,导致请求无法被正确处理。

修复方式:

  • 方法一:新增仅包含请求字段的构造函数:
public User(String email, String password, Boolean isAdmin) {
    this.email = email;
    this.password = password;
    this.isAdmin = isAdmin;
}
  • 方法二:确保Jackson优先使用无参构造+Setter实例化对象(已存在@NoArgsConstructor和@Setter,可补充注解增强兼容性):
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    // 原有字段及注解
}

3. 校验请求路径映射

尽管之前请求正常,仍需确认Postman中的请求路径与Controller的@PostMapping注解路径完全一致,避免大小写、前缀变更等低级错误。

验证流程

  1. 先添加@JsonIgnore解决循环引用,重启服务后重新发送POST请求。
  2. 若问题仍存在,添加指定参数的构造函数确保反序列化正常。
  3. 查看服务器日志,确认是否存在序列化/反序列化异常或其他内部错误,进一步定位问题。

内容的提问来源于stack exchange,提问作者Lemon231

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:50:23