Map<String,Object> map = new HashMap<>();
map.put(“code”,“user.notexist”);
map.put(“message”,e.getMessage());
return map;
}
}
上面的写法没有自适应效果,即浏览器访问返回一个错误页面,其他客户端访问,返回一个JSON数据
出现自适应效果:转发到error请求,让BasicErrorController来处理该请求
这里没有设置错误状态码,转发成功后,状态码为200,因此无法走到定制错误页面解析流程
@ControllerAdvice//处理全局异常的类
public class exception
{
@ExceptionHandler(UserNotFoundException.class)
public String handleException(Exception e){
Map<String,Object> map = new HashMap<>();
map.put(“code”,“user.notexist”);
map.put(“message”,e.getMessage());
//转发到error请求
//BasicErrorController:处理默认/error请求
return “forward:/error”;
}
}
传入我们自己的错误状态码 4xx 5xx,否则就不会进入定制错误页面的解析流程
@ControllerAdvice//处理全局异常的类
public class exception
{
@ExceptionHandler(UserNotFoundException.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”,400);
map.put(“code”,“user.notexist”);
map.put(“message”,e.getMessage());
//转发到error请求
//BasicErrorController:处理默认/error请求
return “forward:/error”;
}
}
将我们定制数据携带出去
出现错误以后,会来到/error请求,会被BasicErrorController处理,响应出去可以获取的数据是由getErrorAttributes得到的(是AbstractErrorController(ErrorController)规定的方法)
1、完全来编写一个ErrorController的实现类【或者是编写AbstractErrorController的子类】,放在容器中;
2、页面上能用的数据,或者是json返回能用的数据都是通过errorAttributes.getErrorAttributes得到;
容器中DefaultErrorAttributes.getErrorAttributes();默认进行数据处理的;
自定义ErrorAttributes(错误属性)
这里springboot都是去容器中查看用户是否存在上面的错误相关的类,如果没有才会使用默认的配置类,因此我们可以通过重写上面的错误类,放入容器中,完成定制错误数据并携带出去
//给容器中加入我们自己定义的ErrorAttributes
@Component
class MyErrorAttributes extends DefaultErrorAttributes
{
//返回值的map就是和页面json能获取的数据
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
map.put(“company”,“大忽悠集团有限公司”);
return map;
}
}
最终的效果:响应是自适应的,可以通过定制ErrorAttributes改变需要返回的内容
如果我们在request域中放入了错误消息如下:
继承DefaultErrorAttributes类并重写其获取错误属性的方法中,获取request域中的数据
//给容器中加入我们自己定义的ErrorAttributes
@Component
class MyErrorAttributes extends DefaultErrorAttributes
{
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
map.put(“company”,“大忽悠集团有限公司”);
//我们从request域中获取的数据
Object msg = webRequest.getAttribute(“error”, 0);
Object msg1 = webRequest.getAttribute(“msg”, 0);
map.put(“mistakes”,msg);
map.put(“msg”,msg1);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
Java面试核心知识点笔记
其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。
Java中高级面试高频考点整理
最后分享Java进阶学习及面试必备的视频教学
ng原理、微服务、Zookeeper、数据库、数据结构等大量知识点。
[外链图片转存中…(img-tw0trAGP-1711581845937)]
Java中高级面试高频考点整理
[外链图片转存中…(img-FarJKxNE-1711581845938)]
[外链图片转存中…(img-tT5D962E-1711581845938)]
最后分享Java进阶学习及面试必备的视频教学
[外链图片转存中…(img-wiykcohk-1711581845939)]