Spring MVC - ExceptionHandler

时间:2017-10-09 00:23:14

标签: spring spring-mvc spring-boot

我正在使用Spring Boot 1.5.7。 我为我的异常提供了一个ExceptionHandler,它返回一个ResponseEntity

@ExceptionHandler(MyException.class)
public ResponseEntity<ResponseExceptionEntity> handleException(MyException e) {
    return ResponseEntity
        .status(HttpStatus.BAD_REQUEST)
        .body(new ResponseExceptionEntity(e));
}     

这适用于在返回ResponseEntity / @ResponseBody(JSON / XML响应)的api调用期间发生异常的情况

我想在返回HTML的请求期间发生异常的情况下返回ModelAndView。在我的情况下,所有控制器都使用@Controller注释,而不是@RestController

  • 如何为两种情况编写ExceptionHandler(api / html)?
  • 或者如何确定控制器方法的已解析视图?
  • 或者我如何确定Controller Method的返回类型 是?
  • 或者如何确定控制器的已解析视图 方法

我已经在这个答案中尝试了这个建议,但是当使用@ResponseBody注释Controller Method时,它并没有返回JSON响应。

https://stackoverflow.com/a/32071252/461055

1 个答案:

答案 0 :(得分:3)

是的,您可以编写两个异常处理程序来处理api和html请求异常。以下是用于说明解决方案的示例代码。

@ControllerAdvice(annotations = RestController.class)
@Order(1)
class RestExceptionHandler {
    @ExceptionHandler(MyException.class)
    @ResponseBody
    ResponseEntity<ErrorResponse> exceptionHandler() {
        ....
    }
}

@ControllerAdvice(annotations = Controller.class)
@Order(2)
class ExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ModelAndView handleError500(HttpServletRequest request, HttpServletResponse response, Exception ex) {
        ModelAndView mav = new ModelAndView("error");
        mav.addObject("error", "500");
        return mav;
    }
}