如何在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
相关产品推荐
相关产品推荐

