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

Spring Data中deleteBy方法为何仅支持GET请求?

问题分析与解决

你遇到的情况是Spring Data Rest的默认行为导致的:自定义的删除方法放在search资源下时,默认只会绑定GET请求,不会自动生成DELETE端点,因此用DELETE请求访问时会返回404。

解决步骤

1. 给删除方法添加@RestResource注解

修改EmployeeRepository中的deleteByFirstName方法,显式指定支持的请求方法和路径,同时用@Param绑定参数:

@RepositoryRestResource(collectionResourceRel = "employees")
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

    @Modifying
    @Transactional
    @RestResource(path = "delete-by-first-name", supportedMethods = {RequestMethod.DELETE})
    public int deleteByFirstName(@Param("firstName") String firstName);
    
    // 其他方法保持不变
    @Query(value = "SELECT e FROM Employee e where e.firstName like %?1% or e.lastName like %?1%")
    public List<Employee> searchWithAny(String searchText);
}
  • path:定义该方法在search下的访问路径,避免与默认命名冲突
  • supportedMethods:明确指定支持DELETE请求
  • @Param:确保请求参数能正确映射到方法参数

2. 使用正确的DELETE请求URL

修正后的请求地址应为:
http://localhost:8888/employees/search/delete-by-first-name?firstName=目标名字
直接用DELETE请求访问该地址即可执行删除操作。

3. 额外注意点

  • 必须保留@Modifying和@Transactional:这两个注解是执行修改/删除操作的必要条件,确保Spring Data JPA能正确处理事务和实体状态更新
  • 检查全局配置:如果项目中自定义了RepositoryRestConfigurer,确保没有禁用DELETE方法的全局配置
  • 批量删除风险:按firstName删除可能会删除多条数据,建议在业务逻辑中增加确认机制,避免误删

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:25:08