我正在使用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
我已经在这个答案中尝试了这个建议,但是当使用@ResponseBody注释Controller Method时,它并没有返回JSON响应。
答案 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;
}
}