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

如何在Delete Mapping中返回响应并校验删除操作结果?

解决方案

方式1:先查询再执行删除

先通过ID检查目标实体是否存在,存在则执行删除并返回noContent();不存在直接返回NOTFOUND,逻辑清晰易懂:

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteEntity(@PathVariable Long id) {
    Optional<Entity> targetEntity = entityRepository.findById(id);
    if (targetEntity.isEmpty()) {
        return ResponseEntity.notFound().build();
    }
    entityRepository.delete(targetEntity.get());
    return ResponseEntity.noContent().build();
}

方式2:通过自定义Repository方法获取删除结果

Spring Data JPA默认的deleteById无返回值,你可以自定义Repository方法返回受影响行数,以此判断删除是否成功:

// 自定义Repository接口
public interface EntityRepository extends JpaRepository<Entity, Long> {
    @Modifying
    @Query("DELETE FROM Entity e WHERE e.id = :id")
    int deleteByEntityId(@Param("id") Long id);
}

// Controller层调用逻辑
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteEntity(@PathVariable Long id) {
    int affectedRows = entityRepository.deleteByEntityId(id);
    if (affectedRows == 0) {
        return ResponseEntity.notFound().build();
    }
    return ResponseEntity.noContent().build();
}

方式3:利用EntityManager操作

通过EntityManager先查找实体,存在则执行删除,否则返回404:

@Autowired
private EntityManager entityManager;

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteEntity(@PathVariable Long id) {
    Entity targetEntity = entityManager.find(Entity.class, id);
    if (targetEntity == null) {
        return ResponseEntity.notFound().build();
    }
    entityManager.remove(targetEntity);
    return ResponseEntity.noContent().build();
}

以上三种方式都能实现你的需求:校验删除操作是否成功,成功返回204 No Content,失败返回404 Not Found,不会出现盲目删除后直接返回204的问题。

内容的提问来源于stack exchange,提问作者MANOJ KUMAR MAHANTA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:55:56