搜外网>搜外问答>问答页面

SpringBoot错误处理机制?


1.1 默认错误处理

浏览器访问出现错误时,会返回一个默认的错误页面。

其他客户端访问出现错误,默认响应一个json数据。

{

"timestamp":"2020-05-07T03:04:44.737+0000",

"status":404,

"error":"Not Found",

"message":"No message available",

"path":"/crud/aax"

}

1234567

如何区分是浏览器访问还是客户端访问?

原因在于浏览器和其他客户端的请求头的accept属性对html页面的请求优先级不同。

1.2 错误处理原理

一但系统出现4xx或者5xx之类的错误,ErrorPageCustomizer组件生效,会执行/error请求。被BasicErrorController处理,此时就会根据请求头的不同来判定返回是返回响应页面还是响应数据。

响应页面:去哪个页面是由DefaultErrorViewResolver解析得到的。

错误处理的自动配置原理可以参照ErrorMvcAutoConfiguration类,该类添加了下列组件:

1、DefaultErrorAttributes组件

作用:帮我们在页面共享信息、

源码:

public class DefaultErrorAttributes implements ErrorAttributes, HandlerExceptionResolver, Ordered {

...

@Override

public Map getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {

Map errorAttributes = new LinkedHashMap<>();

errorAttributes.put("timestamp", new Date());//时间戳

addStatus(errorAttributes, webRequest);//状态码

addErrorDetails(errorAttributes, webRequest, includeStackTrace);

addPath(errorAttributes, webRequest);

return errorAttributes;

}

...

}

1234567891011121314

2、BasicErrorController组件

作用:处理默认/error请求


www.04-cfanim.cn

源码:

@Controller

@RequestMapping("${server.error.path:${error.path:/error}}")

public class BasicErrorController extends AbstractErrorController {

...

//产生html类型的数据

@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)

public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {

HttpStatus status = getStatus(request);

Map model = Collections

.unmodifiableMap(getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));

response.setStatus(status.value());


www.aqrcw.com.cn

//去哪个页面作为错误页面,包含页面地址和页面内容

ModelAndView modelAndView = resolveErrorView(request, response, status, model);

return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);

}

//产生json类型的数据


www.Leide-tech.cn

@RequestMapping

public ResponseEntity

追加问题
    2 人参与回答
S k y *
S k y · ITP病家园:病友自愈案例以及治愈案例!让更多新病友了解ITP,分享传播是一种美德。
权重蜘蛛-池出租 等 1 人赞同该回答

要懂代码的人才清楚吧   请高手来

A 0湖北楚胜汽车.谢非
A 0湖北 · 环卫洒水车、垃圾车、压缩式垃圾车、扫路车、清扫车等专用车销售
权重蜘蛛-池出租 等 1 人赞同该回答

重新写