本章结束后对应的节选代码文件:Gangbb-Vue-12-13-Login(与13章合并)
https://github.com/Gang-bb/Gangbb-Vue
历史遗留TODO:
- 第四章
- 登录日志还未实现。(到登录和权限模块完成)
LogAspect
从缓存获取当前的用户信息使用模拟的数据(到登录和权限模块完成)
- 第十一章
- 需要在Spring Security中注册的登录鉴权逻辑处理类、JWT处理的过滤器、退出登录处理类(到登录和权限模块完成)
本章将留下TODO:
- 无
本章将解决TODO:
- 无
1. 错误返回处理和异常捕捉相关优化修改
修改统一结果返回类ApiRestResponse
, 让错误抛出信息更清晰更灵活。
修改该方法 error(String code, String msg)
:
/**
* 返回错误消息
* @param code 系统自定义状态码
* @param msg 错误信息
* @return
*/
public static ApiRestResponse error(String code, String msg)
{
// 如果填了错误信息 错误信息 = 状态码对应的信息 + 输入的信息
if(StringUtils.isNotEmpty(code) && StringUtils.isNotEmpty(msg)){
String codeDefaultMsg = MessageUtils.getMessageByCode(code);
if(!msg.equals(codeDefaultMsg)){
msg = codeDefaultMsg + "。[具体信息] :" + msg;
}
}else {
return ApiRestResponse.error();
}
log.error(msg);
return new ApiRestResponse(code, msg);
}
MessageUtils
也修改了一些抛出错误部分!
2. 参数校验专题
2.1 添加pom.xml
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
2.2 实现思路
主要思路就是通过 JSR 303
基本的校验规则相关注解 在接口中注释参数。校验不通过的结果,统一通过GlobalExceptionHandler
截获相关的异常,然后给前端和用户良好的错误信息返回。
关于参数校验更多细节可以看官方文档。
Hibernate Validator
中文文档:https://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/#preface
测试时候记得在Spring Secutity的配置文件SecurityConfig
中把。url权限打开。
![image-20210715153055083](https://i-blog.csdnimg.cn/blog_migrate/e83a65bbfa8cca1f560262e3743f2de6.png)
所有常用的设置请求参数的校验用例都在TestParameterController
// TestParameterController 代码请看源码
GlobalExceptionHandler
捕捉了以下异常:
HttpMessageNotReadableException --> post请求没有填写RequestBody情况
MethodArgumentNotValidException --> @Valid @RequestBody + 封装请求参数对象 (对应/test/param /test/param5 /test/param6)情况
MissingServletRequestParameterException --> 校验注解 + @RequestParam + 变量 (对应/test/param2)情况
BindException --> get/post请求 参数写在Query Params(对应/test/param3 /test/param4)情况
ConstraintViolationException --> @Valid @RequestParam 参数校验异常捕捉
HttpMessageNotReadableException --> 请求参数获取异常(一般是用户没填RequestBody)
....
日志配置文件中也增加了一些多余的参数校验的打印输出过滤。(强迫症就是喜欢干净的控制台输出)
![image-20210715153303254](https://i-blog.csdnimg.cn/blog_migrate/f8b1a973f17e887a29eb3da7ecd7e389.png)
3.修改一些之前文件的
-
package com.gangbb.core.model.vo.TableDataInfo
更名为TableDataInfoVO
并移动到package com.gangbb.core.model.vo
目录下。 -
PageDTO
和TableSupport
也修改了位置和实现内容,BaseController
修改了实现内容,并删除package com.gangbb.core.model.page
目录 -
package com.gangbb.core.model.dao
这个路径删除,里面的文件换到package com.gangbb.core.mapper
-
package com.gangbb.test.model.dao
里的文件移到package com.gangbb.test.mapper
并删除该文件 -
package com.gangbb.core.config.ApplicationConfig
中的mapper扫描路径需要改:@MapperScan("com.gangbb.**.mapper")