目录
一、使用@Valid表单验证
二、使用AOP处理请求
三、统一异常处理
四、单元测试
前提:该教程是在SpringBoot入门基础学习(https://blog.csdn.net/qq_28135179/article/details/80685924)之上讲解的,若有疑问可先学习查看SpringBoot入门基础学习内容。
一、使用@Valid表单验证
1、需求:禁止未成年人注册(添加一个学生)
在类中需要验证的属性添加验证@Min表示最小值
在方法类参数前添加@Valid验证注解,BindingResult是验证结果,bindingResult.hasErrors表示是否有错误,bindingResult.getFieldError.getDefaultMessage()表示验证后的错误信息
便于于看到效果,我们先清除数据库中的数据
我们用Postmen测试,先新增一个符合条件的学生
数据库新增成功
添加一条不符合验证的数据
添加失败,控制台打印出错误信息
二、AOP统一处理请求日志
APO(面向切面)是一种编程范式,与语音无关,是一种程序设计思想。除了AOP我们听过OOP(面向对象)、POP(面向过程)
一个网络请求的生命周期:收到HttpReqeust请求--->记录请求--->处理网络请求--->生成HttpResponse--->记录回复
操作数据库的生命周期:收到数据库操作请求--->记录请求--->增删查改--->生成处理结果--->记录回复
在上面两个生命周期中,可以分为三步1-2是请求、3-4是业务逻辑处理、5是回复
1、@Before运行方法前拦截操作
第一步:在pom文件中添加依赖
第二步:创建处理文件@Component引入Spring容器,@Before中填写需要拦截的方法名或整个类,log()方法中处理这些拦截下来的请求。
我们用Postmen访问
控制台打印拦截信息
如果我们想拦截整个类中的所有方法可以
2、@After运行方法后拦截操作
Postmen中测试
控制台打印
在上面代码中,我们又写了很多重复的代码,在开发是我们应该避免写重复的代码,这样后期维护比较容易
解决方法:@Pointcut()提取公共部分
使用Logger打印日志
控制台打印
3、记录每个http请求
Postmen测试
控制台打印日志
4、获取请求返回的内容
由于返回的是一个对象,在类中添加toString方法可看到具体的参数值
Postmen测试
控制台打印
三、统一异常处理
1、统一返回
前面我们在做表单验证的时候,添加一个学生信息,学生年龄必须要大于18岁,在我们处理返回数据时如果满足条件返回时一个对象,如果不符合条件,返回的是提示语句,这样返回没有统一的格式,比较乱,下面我们做一个统一的返回。
先写一个公共请求返回类,添加get\set方法
添加统一放回方法
原来的新增方法
修改后
Postmen测试
成功
失败
2、假设我们查询年龄小于10和10-16的学生是异常的
Postman测试
打印的格式,与我们定义的格式不同,则需要建一个捕获异常
Postman测试
上边的测试中,我们的code是固定的,我们想要code灵活使用,则需要自定义异常
定义异常,继承RuntimeException可以事务回滚,而继承Exception是不能事务回滚的
Postmen测试
现在异常只会显示我们定义的异常信息,如果我们想打印系统异常所有信息,可以打印异常日志
3、统一管理code和message,就需要用到枚举
创建一个包和枚举类
类方法
调用方法
Postmen测试
五、单元测试
1、service测试
需要测试的方法
测试类,数据库中id=8的,年龄=9
编译
如果我们改为
控制台报错
idea工具也提供了更便捷自动生成测试类的方法
在service中选中方法名,右键go to 选中test
2、对Controller、API测试测试
我们测试studentList,创建测试类
自动生成
测试代码
控制台
如果修改了url
控制台
系统打包的时候会自动把所有的测试用例都运行一遍,报错的话会打印报错信息