Spring Boot - 全局异常处理
2018-01-06 00:12
826 查看
Spring Boot 全局异常处理
0x01 问题场景
在使用spring boot开发的时候好奇为什么网页访问返回页面而ajax访问返回json数据,以及如何处理异常为什么使用
@ExceptionHandler无法处理404
0x02 前置知识
了解servlet中处理错误的方式spring mvc和spring boot异常捕获只是在请求过程中捕获异常,意味着只捕获进入Controller层的异常,其他异常会抛给服务器,所以有时候会出现一些tomcat的页面,而在spring boot中,因为实现了内置服务器,并重写了一个方法来处理异常。
spring boot有一个BasicErrorController用来兜底的,在ErrorMvcAutoConfiguration中配置了错误重定向到/error,该Controller实现了ErrorController接口,自动配置只有在没有发现实现了该接口的类时,就会自动加载BasicErrorController。
而返回结果是因为
ViewResolver,有一个实现类会根据content-type返回不同的
0x03 解决思路
当开发API模块的使用,使用@ControllerAdvice配合
@ExceptionHandler可以解决基本问题,同时为了捕获404等错误,还需要在application.yml中配置
spring: mvc: throw-exception-if-no-handler-found: true resources: add-mappings: false
这两个配置指定了要捕获请求未找到等异常,同时因为是API所以不需要有资源映射
当开发后台模块的时候,因为有ajax请求也有页面请求。方式是继承BasicErrorController即可
@Controller @RequestMapping({"${server.error.path:${error.path:/error}}"}) public class MyBasicExtendsController extends BasicErrorController { public MyBasicExtendsController(){ super(new DefaultErrorAttributes(), new ErrorProperties()); } @Override public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { return new ResponseEntity(HttpStatus.BAD_REQUEST); } @Override public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) { return super.errorHtml(request, response); } }
然后重写2个方法即可,还有一些需要定制的参数也可以自己注入。然后只要实现一个error.html的页面即可。
0xFF 参考资料
https://www.cnblogs.com/xinzhao/p/4934247.html?utm_source=tuicool&utm_medium=referralhttps://www.cnblogs.com/xinzhao/p/4902295.html?utm_source=tuicool&utm_medium=referral
https://segmentfault.com/a/1190000010060540
https://segmentfault.com/a/1190000006749441
相关文章推荐
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
- SpringBoot----全局异常处理
- Spring Boot全局异常处理解析
- spring boot 学习--03---web控制层全局异常处理
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
- spring boot全局异常处理
- SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
- Spring boot 全局异常处理
- springboot-20-全局异常处理
- SpringBoot全局异常处理
- springboot全局异常处理
- 第四十五章 SpringBoot全局异常处理
- spring boot学习教程(4):全局异常处理代码demo
- SpringBoot学习之全局异常处理设置(返回JSON)
- SpringBoot全局异常处理
- Spring-Boot--日志操作【全局异常捕获消息处理☞日志控制台输出+日志文件记录】
- Spring boot 七 全局异常处理
- Spring-Boot--日志操作全局异常捕获消息处理☞日志控制台输出+日志文件记录
- springBoot注解大全JPA注解springMVC相关注解全局异常处理
- spring boot之全局异常处理代码demo