如何统一处理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全部源码
25万+

被折叠的 条评论
为什么被折叠?



