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

Spring Data MongoDB重写deleteById实现软删除,避免多余搜索端点

解决MongoRepository软删除时多余GET端点的问题

方案:拆分方法实现逻辑隔离

直接在重写的deleteById上用@Query和@Update会被Spring Data REST判定为自定义查询,自动生成/search端点;加@RestResource(exported=false)又会连带干掉原DELETE端点。试试拆分方法的思路:

@RepositoryRestResource(collectionResourceRel = "entityname", path = "entityname")
public interface EntityRepository extends MongoRepository<Entity, String> {

    // 自定义软删除方法,仅处理更新逻辑,隐藏掉搜索端点
    @Update("{ '$set': { 'deleted': true } }")
    @Query("{ '_id': ?0 }")
    @RestResource(exported = false)
    void softDeleteById(String id);

    // 重写deleteById,内部调用软删除方法
    @Override
    default void deleteById(String id) {
        softDeleteById(id);
    }
}

效果验证

  • 原有的DELETE /entityname/{id}端点正常可用,调用后执行软删除,返回204 No Content
  • 不会生成多余的GET /entityname/search/deleteById或/search/softDeleteById端点
  • 即便有人尝试访问/search相关的软删除端点,会直接返回404

原理说明

把软删除逻辑拆到单独的softDeleteById方法里,并用@RestResource(exported=false)禁止Spring Data REST暴露它的搜索端点。而重写的deleteById继承了Spring Data REST默认的DELETE端点配置,不会被额外处理成查询方法,完美避开了原问题里的冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:42:36