文章目录
一、统一异常处理
在做统一异常处理的时候,确实犯了难,之前只跟着视频做过一次统一异常处理,那时候还不是基于springboot,关键当时没有理解他实现的原理,这次在我们的项目中需要加入统一异常处理,我首先想到springboot是否自带这个功能,于是就上百度搜索,果然还是有的
1、基于@ControllerAdvice注解的Controller层的全局异常统一处理
但是有个明显的缺点就是,基于@ControllerAdvice注解的全局异常统一处理只能针对于Controller层的异常,意思是只能捕获到Controller层的异常,在service层或者其他层面的异常都不能捕获。
于是我找到了第二种方式
2、基于Springboot自身的全局异常统一处理,主要是实现ErrorController接口或者继承AbstractErrorController抽象类或者继承BasicErrorController类
这种方式似乎就没什么问题了,可以捕获全局异常
在这个时候,我突然就找到了第三种方法
3.使用AOP方式来做全局异常统一处理
并且人家介绍的优点多多——选用AOP方式主要是因为AOP不只可以做全局异常统一处理还可以统一打印接口请求入参和返回结果日志,打印接口访问性能日志,处理sql注入攻击以及处理入参特殊字符等问题。
我感叹真是妙极了,就决定采取这种方法了,这种方法似乎是更加先进的方法
但随后我又看见人家说了这个方式的缺点,每次都会执行切面程序,影响项目的效率
这时候我陷入了两难,不知道如何取舍
问老师:
老师给我的解答是采取sprigboot自带的方式做统一异常处理,
我觉得是因为在实际环境中效率肯定要放在第一位的原因,而打印接口请求入参和返回结果日志,打印接口访问性能日志这些功能,都十分影响性能,肯定不会在上线的环境中使用
所以我决定采用第二种方式
二、项目的开发
在开发一个添加单词功能的时候,犯了难,问题层出不穷,他是一个表附带这三个表,一次操作,完成对四个表的添加,前端传过来的JSon中,其余的三个表对应的还是数组对象。确实对我来说还挺难搞得。
首先在前端传送json数据的时候,一直传不过来,检查了一下自己确实是post请求,看了一下错误说是我违反了RFC3986,继续上网搜索,确实有好多人都有这个问题,要在主类中加入下面这个bean来使违法的符号通过即可
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]"));
return factory;
}
请求能发进来了
三、本周的困难
原本有一个困难,一次请求要完成四个表的添加,json中的数组类型,我给单开了一个表,但作为数组注入的时候,一直注入不进来,后来改成单表的增删改查之后,倒是避免了这个问题,但这个功能得留个TODO,以后做
目前卡一个bug,卡了巨长时间,mybatis-plus 通过xml文件出来的sql,测试一定会报错,百度的各种方法都试过了,版本也回退过3.0.5,还是没有用,yml文件里的路径反复确定写的是对的,mapperscan注解路径扫的也是对的,mapper与xml的名字路径都是对上的,百度用的去也用了,在pom文件的build加resources也没有用。
陷入僵局,
明天继续想
总结
在大脑最好用的时候,多学点东西
但还是得让脑袋休息一下