如何定制错误的页面
1、如何定制错误的页面:
有模板的情况下:error/状态码,将错误页面命名为错误状态码.Html放在模版引擎文件夹里面的error文件夹下,发生错误状态码的错误就会来到相应的页面
我们可以使用4xx、5xx作为错误页面的文件名来匹配这种类型的所有错误页面,精确优先,(优先寻找精确的状态码.html)
页面能获取的信息:
Timestamp:时间戳
Status:状态码
Error:错误提示
Exception:异常对象
Message:异常信息
Errors:jsr303数据校验的错误放在这里
2、没有模版引擎(模版引擎找不到这个页面),静态资源文件夹下找。
3、以上都没有错误页面,就是默认来到SpringBoot默认的错误提示页面。如何定制错误的json数据
1、自定义异常处理&返回一定值json数据
@ControllerAdvice
public class MyExceptionHandler {
@ResponseBody
@ExceptionHandler(UserNotExistException.class)
public Map<String,Object> handleException(Exception e){
Map<String,Object> map = new HashMap<>();
map.put("code","user.notexist");
map.put("message",e.getMessage());
return map;
}
}
//没有自适应效果...
2、转发到/error进行自适应响应效果处理
@ExceptionHandler(UserNotExistException.class)
public String handleException (Exception e, HttpServletRequest request){
Map<String, Object> map = new HashMap<>();
//传入我们自己的错误状态码 4xx 5xx,否则就不会进入定制错误页面的解析流程
/**
* Integer statusCode = (Integer) request
* .getAttribute("javax.servlet.error.status_code");
* */
request.setAttribute("javax.servlet.error.status_code", 500);
map.put("code", "user.notexist");
map.put("message", e.getMessage());
//转发到/error
return "forward:/error";
}
3、将我们的定制数据携带出去
出现错误以后,会带来/error请求,会被BasicErrorController处理,响应出去可以获取的数据是有getErrorAttribute得到的(是AbstractErrorController(E rrorController)规定的方法);
3-1、完全来编写一个ErrorController的实现类,【或者是编写AbstractErrorController的子类】,放在容器中。
3-2、页面上能用的数据,或者是json数据范湖能用的数据都通过eroorAttribute.getErrorAttributes得到,容器中DefaultErrorAttributes.getErrorAttributes()默认进行数据处理的。
自定义ErrorAttributes
//给容器中加入我们自己定义的ErrorAttributes
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(RequestAttributes requestAttributes,
boolean includeStackTrace) {
Map<String, Object> map = super.getErrorAttributes(requestAttributes,
includeStackTrace);
map.put("company", "test");
return map;
}
}
最终返回json字符串。