spring boot覆盖默认的REST异常处理程序

Joh*_*ohn 6 rest groovy spring spring-boot

我无法在REST api中覆盖默认的Spring引导错误响应.我有以下代码

@ControllerAdvice
@Controller
class ExceptionHandlerCtrl {

    @ResponseStatus(value=HttpStatus.UNPROCESSABLE_ENTITY, reason="Invalid data")
    @ExceptionHandler(BusinessValidationException.class)
    @ResponseBody
    public ResponseEntity<BusinessValidationErrorVO> handleBusinessValidationException(BusinessValidationException exception){
        BusinessValidationErrorVO vo = new BusinessValidationErrorVO()
        vo.errors = exception.validationException
        vo.msg = exception.message
        def result =  new ResponseEntity<>(vo, HttpStatus.UNPROCESSABLE_ENTITY);
        result

    }
Run Code Online (Sandbox Code Playgroud)

然后在我的REST api中,我抛出了这个BusinessValidationException.调用此处理程序(我可以在调试器中看到它)但是我仍然有默认的spring boot REST错误消息.有没有办法覆盖并使用默认值作为后备?带有常规的Spring Boot版本1.3.2.最好的祝福

Cru*_*nch 9

@ResponseStatus从您的方法中删除.它会产生不良副作用,你不需要它,因为你正在设置HttpStatus.UNPROCESSABLE_ENTITY你的ResponseEntity.

来自JavaDocResponseStatus:

警告:在异常类上使用此批注时,或者在设置此批注的reason属性时,HttpServletResponse.sendError将使用该方法.

因此HttpServletResponse.sendError,响应被认为是完整的,不应再写入.此外,Servlet容器通常会编写HTML错误页面,因此会使用不适合REST API的原因.对于这种情况,最好使用a ResponseEntity作为返回类型并避免@ResponseStatus完全使用.