首先在控制器中创建异常的请求
@Controller
public class HelloWorldController {
@RequestMapping("/hello")
public String hello()
{
int i = 1/0;
return hello;
}
}
一、简单配置
1. 在 resource->static下创建 error文件夹并创建404.html 和500.html
2 或在 resource->templates下创建 error文件夹并创建4xx.html 和5xx.html(优先级高于1)
二、自定义Error数据
1.自定义Error错误
@Component
public class CustomErrorAttributes extends DefaultErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> errorAttributes = super.getErrorAttributes(webRequest,includeStackTrace);
errorAttributes.put("timestamp", new Date());
errorAttributes.put("custommsg","出错了");
// errorAttributes.remove("error");
return errorAttributes;
}
}
2.修改4xx.html 和5xx.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>timestamp</td>
<td th:text="${timestamp}"></td>
</tr>
<tr>
<td>status</td>
<td th:text="${status}"></td>
</tr>
<tr>
<td>error</td>
<td th:text="${error}"></td>
</tr>
<tr>
<td>custommsg</td>
<td th:text="${custommsg}"></td>
</tr>
<tr>
<td>message</td>
<td th:text="${messages}"></td>
</tr>
<tr>
<td>path</td>
<td th:text="${path}"></td>
</tr>
</table>
</body>
</html>
三、自定义Error视图
1.定义视图配置
@Component
public class CustomErrorViewResolver implements ErrorViewResolver {
@Override
public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model){
ModelAndView mv = new ModelAndView("errorPage");
mv.addObject("custommsg","出现错误");
mv.addAllObjects(model);
return mv;
}
}
2.在 resource->templates下创建 errorPage.html 代码和4xx.html中一致
四、完全自定义
1.创建自动化配置类
@RestController
public class CustomErrorController extends BasicErrorController {
@Autowired
public CustomErrorController(ErrorAttributes errorAttributes, ServerProperties serverProperties, List<ErrorViewResolver> errorViewResolverList)
{
super(errorAttributes,serverProperties.getError(),errorViewResolverList);
}
@Override
@ResponseBody
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
HttpStatus status = this.getStatus(request);
Map<String, Object> model = getErrorAttributes(request,isIncludeStackTrace(request,MediaType.TEXT_HTML));
model.put("custommsg","访问出错了");
ModelAndView modelAndView = new ModelAndView("customErrorPage",model,status);
return modelAndView ;
}
@Override
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String,Object> body = getErrorAttributes(request,isIncludeStackTrace(request,MediaType.TEXT_HTML));
body.put("custommsg","访问出错了");
HttpStatus status = getStatus(request);
return new ResponseEntity<>(body,status);
}
}
2.在 resource->templates下创建 customErrorPage.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>CustomErrorPage</h1>
<table border="1">
<tr>
<td>timestamp</td>
<td th:text="${timestamp}"></td>
</tr>
<tr>
<td>status</td>
<td th:text="${status}"></td>
</tr>
<tr>
<td>error</td>
<td th:text="${error}"></td>
</tr>
<tr>
<td>custommsg</td>
<td th:text="${custommsg}"></td>
</tr>
<tr>
<td>message</td>
<td th:text="${messages}"></td>
</tr>
<tr>
<td>path</td>
<td th:text="${path}"></td>
</tr>
</table>
</body>
</html>
3.页面访问
4.Postman 测试