在我的应用程序中,我同时提供了特定异常和通用异常(Exception.class
)的处理程序。问题是,每当向API提供错误的输入时,都会抛出BAD REQUEST
(HTTP-400)。但是,如果发生BAD请求,它将返回HTTP-500。验证spring boot会自动触发自身,但是会被handleApplicationException捕获。
@ExceptionHandler(value = Exception.class)
public ResponseEntity<ErrorResponseDTO> handleApplicationException(final Exception ex) {
LOGGER.error("Unhandled Exception occurred ", ex);
ErrorResponseDTO errorResponseDTO = new ErrorResponseDTO();
errorResponseDTO.setMessage("Internal Server Error");
errorResponseDTO.setHttpStatus(HttpStatus.INTERNAL_SERVER_ERROR);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponseDTO);
}
@ExceptionHandler(value = ResourceNotFoundException.class)
public ResponseEntity<ErrorResponseDTO> handleResourceNotFoundException(final ResourceNotFoundException
notFoundException) {
LOGGER.error("Handling resource not found exception", notFoundException);
ErrorResponseDTO errorResponseDTO = new ErrorResponseDTO();
errorResponseDTO.setMessage(notFoundException.getMessage());
errorResponseDTO.setHttpStatus(HttpStatus.NOT_FOUND);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(errorResponseDTO);
}
答案 0 :(得分:0)
我认为为Exception
类提供异常处理程序是一种不好的做法。大多数例外通常都继承自Exception
类,并且依次被handleApplicationException
处理程序捕获。
专注于处理特定的异常。
例如,如果客户端发送格式错误的JSON并抛出HttpMessageNotReadableException
,则可以在您的 Exception Handler 中捕获该错误并执行所需操作,或者只需删除您的Exception.class
Spring的异常处理程序将返回400 - BAD REQUEST
响应。