覆盖默认的错误处理方式
默认错误处理机制的响应内容格式不一定是你相中的。理由可能如下:
- “Whitelabel Error Page”页面的样式太单调,用户体验不好。
Json格式的结果字符串不统一,与你配合的前端人员更希望统一格式,好做统一的显示处理。比如与前端人员配合时统一指定响应结果格式为“{status:true,msg:”xxx”,data:{xxx}}”,但Spring Boot的Json格式是{status:500,message:”error occur”,path:”/exception”……}。
那么你可能更期望可以修改默认的处理方式,改变响应内容格式。Spring Boot开发指南上给出了几种方法。
- 自定义一个bean,实现ErrorController接口,那么默认的错误处理机制将不再生效。
- 自定义一个bean,继承BasicErrorController类,使用一部分现成的功能,自己也可以添加新的public方法,使用@RequestMapping及其produces属性指定新的地址映射。
- 自定义一个ErrorAttribute类型的bean,那么还是默认的两种响应方式,只不过改变了内容项而已。
- 继承AbstractErrorController
BasicErrorController源码
SpringBoot在页面 发生异常的时候会自动把请求转到/error,SpringBoot内置了一个BasicErrorController对异常进行统一的处理,当然也可以自定义这个路径
application.yaml
server:
port: 8080
error:
path: /custom/error
BasicErrorController提供两种返回错误一种是页面返回、当你是页面请求的时候就会返回页面,另外一种是json请求的时候就会返回json错误:
@RequestMapping(produces = "text/html")
public ModelAndView errorHtml(HttpServletRequest request,
HttpServletResponse response) {
HttpStatus status = getStatus(request);
Map<String, Object> model = Collections.unmodifiableMap(getErrorAttr