Spring Boot 3.1.3中JpaRepository的PUT/PATCH方法默认无法使用的解决方法
解决Spring Boot 3.1.3中Spring Data Rest PUT/PATCH方法不可用的问题
问题根源及解决方案
1. 修正请求路径
你的EmployeeRepository通过@RepositoryRestResource(path = "members")将资源路径指定为/members,但错误日志显示请求路径是/employees,这是路径不匹配导致的404错误。
- 正确的PUT请求路径:
PUT /members/{id}(全量更新指定ID的员工) - 正确的PATCH请求路径:
PATCH /members/{id}(部分更新指定ID的员工)
2. 为实体类添加Getter和Setter方法
你提供的Employee实体类仅包含构造器,缺少属性的Getter和Setter方法。Spring Data Rest在处理PUT/PATCH请求时,需要通过这些方法访问或修改实体属性,没有它们会导致更新逻辑无法执行。
修改后的实体类示例:
@Entity @Table(name = "employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private int id; @Column(name = "first_name") private String firstName; @Column(name = "last_name") private String lastName; @Column(name = "email") private String email; public Employee() { } public Employee(String firstName, String lastName, String email) { this.firstName = firstName; this.lastName = lastName; this.email = email; } // 添加所有属性的Getter和Setter public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
如果不想手动编写Getter/Setter,可以使用Lombok的@Data注解简化(需先引入Lombok依赖):
@Entity @Table(name = "employee") @Data public class Employee { // 原有代码不变 }
3. 确认JpaRepository的Save方法有效性
JpaRepository继承自CrudRepository,自带的<S extends T> S save(S entity)方法完全满足Spring Data Rest对PUT/PATCH的要求,无需额外定义。PUT请求会通过该方法执行全量替换,PATCH请求会先查询实体、更新指定属性后再调用该方法保存。
完成以上调整后,PUT和PATCH方法即可正常使用。
内容的提问来源于stack exchange,提问作者Kaliyug Antagonist
相关产品推荐
相关产品推荐

