SpringBoot异常的设计原理
1,SpringBoot 中是BasicErrorController的基类来是实现错误的。
@Controller
@RequestMapping("KaTeX parse error: Expected '}', got 'EOF' at end of input: …ver.error.path:{error.path:/error}}")
public class BasicErrorController extends AbstractErrorController {}
2,这个类里面有两个方法 errorHtml()和error()方法
@RequestMapping(produces = "text/html")
public ModelAndView errorHtml(HttpServletRequest request,
HttpServletResponse response) {
response.setStatus(getStatus(request).value());
Map<String, Object> model = getErrorAttributes(request,
isIncludeStackTrace(request, MediaType.TEXT_HTML));
return new ModelAndView("error", model);
}
@RequestMapping
@ResponseBody
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = getErrorAttributes(request,
isIncludeStackTrace(request, MediaType.ALL));
HttpStatus status = getStatus(request);
return new ResponseEntity<Map<String, Object>>(body, status);
}
3, 请求request中的Accept符合一种MediaType才会执行,也就是当request中Accept 值为text/html 会进去到errorHtml,返回的是错误页面
4, 如果是用postmain 客户端请求则进入到error()方法返回的就是json