SpringBoot RESTful 应用中的异常处理小结 [转]
Posted tangdatou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot RESTful 应用中的异常处理小结 [转]相关的知识,希望对你有一定的参考价值。
在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。
这里使用
@ControllerAdvice ,@ExceptionHandler(value = BaseException.class)
需要注意的是, ExceptionHandler 的优先级比 ControllerAdvice 高, 即 Controller 抛出的异常如果既可以让 ExceptionHandler 标注的方法处理, 又可以让 ControllerAdvice 标注的类中的方法处理, 则优先让 ExceptionHandler 标注的方法处理.
@RestController @ControllerAdvice public class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger("GlobalExceptionHandler"); @ExceptionHandler(value = BaseException.class) @ResponseBody public Object baseErrorHandler(HttpServletRequest req, Exception e) throws Exception { logger.error("---BaseException Handler---Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), e.getMessage()); return "---BaseException Handler---:" + e.getMessage(); } @ExceptionHandler(value = Exception.class) @ResponseBody public Object defaultErrorHandler(HttpServletRequest req, Exception ex) throws Exception { logger.error("---DefaultException Handler---Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), ex.getMessage()); JSONObject json = new JSONObject(); json.put("errorMsg", ex.getMessage()); json.put("errorCode", HttpStatus.BAD_REQUEST); return ResponseEntity.badRequest().body(json); } }
@RestController public class DemoController { private Logger logger = LoggerFactory.getLogger("GlobalExceptionHandler"); @RequestMapping("/ex1") public Object throwBaseException() throws Exception { throw new BaseException("This is BaseException."); } @RequestMapping("/ex2") public Object throwMyException1() throws Exception { throw new MyException1("This is MyException1."); } @RequestMapping("/ex3") public Object throwMyException2() throws Exception { throw new MyException2("This is MyException1."); } @RequestMapping("/ex4") public Object throwIOException() throws Exception { throw new IOException("This is IOException."); } @RequestMapping("/ex5") public Object throwNullPointerException() throws Exception { throw new NullPointerException("This is NullPointerException."); } }
以上是关于SpringBoot RESTful 应用中的异常处理小结 [转]的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot/SpringMVC Restful接口全局异常处理
Spring Boot提供RESTful接口时的错误处理实践
spring boot 2 全局统一返回RESTful风格数据统一异常处理
springboot的服务端Restful风格 API接口,在不同场景下,设置不同的请求及传参方式的设计,及其他异常场景解决方案