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

Spring Boot PUT请求使用路径变量ID无需请求体传ID的修改方法

问题解决方法

问题根源:当前代码中Service层的更新SQL语句,WHERE条件使用的是从请求体反序列化得到的Person对象的id属性,并没有用到URL路径传递的id参数,所以才要求请求体必须携带ID才能正常执行更新。
以下两种方案都可以实现不需要请求体传ID的需求:


方案1:修改Service层SQL参数(改动最小)

直接将Service方法中JDBC的第二个参数,从person.getId()替换为方法入参的路径ID即可,无需修改其他层代码:

public int updatePerson(UUID id, Person person) {
    String sql = "UPDATE person SET name = ? WHERE id = ?";
    // 第二个参数改用路径传入的id,不再从请求体的Person对象取值
    return jdbcTemplate.update(sql, person.getName(), id);
}

方案2:Controller层注入ID到Person对象(扩展性更好)

如果后续业务逻辑需要用到Person对象的id属性,建议优先用这个方案:

  1. 首先在Person实体类补全id的setter方法
public class Person {
    private String name;
    private UUID id;
    
    public Person(UUID id, String name) {
        this.id = id;
        this.name = name;
    }
    // 新增id的setter方法
    public void setId(UUID id) {
        this.id = id;
    }
    // ...原有getters
}
  1. 修改Controller层代码,将路径ID注入到请求体的Person对象中
@PutMapping("/{id}")
public int updatePerson(@PathVariable UUID id, @RequestBody Person person) {
    person.setId(id);
    return personService.updatePerson(id, person);
}

这个方案下Service层代码无需修改,后续所有调用person.getId()的逻辑都能正常获取到URL路径传递的ID。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:57:00