在春季启动时提供通用异常处理程序,可将所有异常纳入HTTP 500

时间:2018-10-12 07:26:08

标签: java spring rest exception-handling

在我的应用程序中,我同时提供了特定异常和通用异常(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);
}

1 个答案:

答案 0 :(得分:0)

我认为为Exception类提供异常处理程序是一种不好的做法。大多数例外通常都继承自Exception类,并且依次被handleApplicationException处理程序捕获。

  

专注于处理特定的异常。

例如,如果客户端发送格式错误的JSON并抛出HttpMessageNotReadableException,则可以在您的 Exception Handler 中捕获该错误并执行所需操作,或者只需删除您的Exception.class Spring的异常处理程序将返回400 - BAD REQUEST响应。