SpringBoot 统一异常处理
(1)统一格式
首先我们需要定义错误页面的统一格式:
@Data
public class ResponseData {
private Boolean status = true;
private int code = 200;
private String message = "";
private Object data;
}
- @Data 是lombok插件提供的注解,可以对实体类提供Getter、Setter方法,方便开发。
(2)编写统一异常处理类
然后开始编写统一异常处理的相应逻辑:
@ControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseData defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
logger.error("", e);
ResponseData r = new ResponseData();
r.setMessage(e.getMessage());
if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) {
r.setCode(404);
} else {
r.setCode(500);
}
r.setData(null);
r.setStatus(false);
return r;
}
}
这里有几个点需要说明:
- @ControllerAdvice 是Spring MVC中的注解,是@Controller的加强特定版,这里作为全局异常处理来使用,这只是其中的一种用法。
- @ExceptionHandler用来指明异常的类型,这里捕获所有的异常,可根据场景自行设计。
(3)配置文件
最后关键的一步是在配置文件中加上如下注解:
#出现错误时,直接抛出异常
spring.mvc.throw-exception-if-no-handler-found=true
#不要为我们的工程中的资源文件建立映射
spring.resources.add-mappings=false
以上内容参考自:
- 《Spring Cloud微服务入门、实战与进阶》----尹吉欢
- @ControllerAdvice的更多用法,移步https://www.cnblogs.com/lenve/p/10748453.html