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

Spring Boot Patch更新接口返回404错误,JpaRepository.save异常排查

问题分析与解决

核心原因:请求路径与控制器映射不匹配

404错误意味着请求的路径未匹配到任何控制器方法,结合你的场景,可能的原因如下:

1. 控制器类基础路径重复定义

如果你的控制器类已添加@RequestMapping("/api")注解,那么方法上的@PatchMapping("/api/user")会让最终接口路径变为/api/api/user,而你实际请求的是/api/user,自然无法找到对应接口。

解决方法:
检查控制器类的注解,若已有@RequestMapping("/api"),则将方法上的映射改为@PatchMapping("/user"),确保最终路径为/api/user。

2. 请求路径末尾斜杠问题

虽然Spring Boot默认忽略路径末尾的斜杠,但部分配置或Postman的请求设置可能导致匹配失败。你返回的响应中path为/api/user/,而控制器映射的是/api/user,可以尝试去掉请求路径末尾的斜杠后重新测试。

3. 请求方法选择错误

确认Postman中选择的请求方法是PATCH,而非GET、POST等其他方法。若方法选错,也会出现路径匹配失败的404错误。

额外优化建议

  • AppUser实体类无需添加@Component注解,@Entity已足够让JPA管理该实体,多余的@Component可能导致不必要的实例创建。
  • 当前save()方法逻辑存在隐患:直接传入AppUser对象调用save()时,若对象是游离态(非从数据库查询的实例),JPA可能执行插入而非更新操作。正确的更新逻辑应先通过ID查询数据库中的用户,再修改字段后保存:
AppUser existingUser = appUserRepository.findById(user.getId())
    .orElseThrow(() -> new RuntimeException("User not found"));
existingUser.setUsername(user.getUsername());
existingUser.setPassword(user.getPassword());
existingUser.setBalance(user.getBalance());
appUserRepository.save(existingUser);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:55:06