[DÚVIDA]deleteById java com jpa
Olá pessoal,
Estou desenvolvendo um API simples para testes com spring, implementando as operações de CRUD, porém quando eu implementei o método delete, eu esperava uma exceção do tipo EmptyResultDataAccessException
por default caso o id não existir.
Nesse caso, estou usando padrão camadas, segue abaixo:
[Package]Service
Classe: ProductService.java
public void delete(Long id) {
try {
repository.deleteById(id);
}catch (EmptyResultDataAccessException e) {
throw new ResourceNotFoundException("id not found");
}
}
[Package]Resource
Classe ResourceExceptionHandler.java
: Centraliza exceções capturadas
@ControllerAdvice
public class ResourceExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<StandardError> entityNotFound(ResourceNotFoundException e, HttpServletRequest request){
StandardError err = new StandardError();
HttpStatus status = HttpStatus.NOT_FOUND;
err.setTimestamp(Instant.now());
err.setStatus(status.value());
err.setError("Resource not found");
err.setMessage(e.getMessage());
err.setPath(request.getRequestURI());
return ResponseEntity.status(status).body(err);
}
}
Classe: ProductResource.java
@DeleteMapping(value = "/{id}")
public ResponseEntity<Void> delete(@PathVariable Long id){
service.delete(id);
return ResponseEntity.noContent().build();
}
Versão do Spring Boot: 3.1.3
Mas o que acontece não é o esperado, pois quando eu tento deletar um id que não existe, o postman retorna "204 - No content",
Nesse caso tenho certeza que o id 1000 não existe
Minha dúvida é: Esse tipo de retorno está correto? Se sim, alguém poderia por gentileza me explicar o por que? Pois lembro de que nas versões mais antigas do spring ele lançava o EmptyResultDataAccessException
quando um id não existente era passado na rota, exemplo: http://localhost:8080/products/1000 (Id inexistente)
Desde já agradeço a atenção!