如何统一处理spring boot 框架下异常信息。
注意
@EqualsAndHashCode(callSuper = true) 该标签的使用。
使用@ControllerAdvice 标签将系统异常全部捕获,在进行分类处理
@ControllerAdvice @Slf4j public class DemoExceptionHandler { private static final String DEFAULT_ERROR_VIEW = "error"; /** * 统一 json 异常处理 * * @param exception JsonException * @return 统一返回 json 格式 */ @ExceptionHandler(value = JsonException.class) @ResponseBody public ApiResponse jsonErrorHandler(JsonException exception) { log.error("【JsonException】:{}", exception.getMessage()); return ApiResponse.ofException(exception); } /** * 统一 页面 异常处理 * * @param exception PageException * @return 统一跳转到异常页面 */ @ExceptionHandler(value = PageException.class) public ModelAndView pageErrorHandler(PageException exception) { log.error("【DemoPageException】:{}", exception.getMessage()); ModelAndView view = new ModelAndView(); view.addObject("message", exception.getMessage()); view.setViewName(DEFAULT_ERROR_VIEW); return view; } }
当项目抛出异常之后,例如controller抛出异常,异常就会被通过上面个handler进行处理分类:
/** * <p> * 测试Controller * </p> * * @author yangkai.shen * @date Created in 2018-10-02 20:49 */ @Controller public class TestController { @GetMapping("/json") @ResponseBody public ApiResponse jsonException() { throw new JsonException(Status.UNKNOWN_ERROR); } @GetMapping("/page") public ModelAndView pageException() { throw new PageException(Status.UNKNOWN_ERROR); } }
附件中已经提供demo全部源码