SpringBoot---错误处理机制,字节跳动算法工程师面试总

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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

img
img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
img

Java面试核心知识点笔记

其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

Java中高级面试高频考点整理

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

最后分享Java进阶学习及面试必备的视频教学

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

ng原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

[外链图片转存中…(img-tw0trAGP-1711581845937)]

Java中高级面试高频考点整理

[外链图片转存中…(img-FarJKxNE-1711581845938)]

[外链图片转存中…(img-tT5D962E-1711581845938)]

最后分享Java进阶学习及面试必备的视频教学

[外链图片转存中…(img-wiykcohk-1711581845939)]

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值