SpringBoot入门基础学习(二)

目录

一、使用@Valid表单验证

二、使用AOP处理请求

三、统一异常处理

四、单元测试

前提:该教程是在SpringBoot入门基础学习(https://blog.csdn.net/qq_28135179/article/details/80685924)之上讲解的,若有疑问可先学习查看SpringBoot入门基础学习内容。

一、使用@Valid表单验证


1、需求:禁止未成年人注册(添加一个学生)

在类中需要验证的属性添加验证@Min表示最小值

SpringBoot入门基础学习(二)_第1张图片

在方法类参数前添加@Valid验证注解,BindingResult是验证结果,bindingResult.hasErrors表示是否有错误,bindingResult.getFieldError.getDefaultMessage()表示验证后的错误信息

SpringBoot入门基础学习(二)_第2张图片


便于于看到效果,我们先清除数据库中的数据

SpringBoot入门基础学习(二)_第3张图片

我们用Postmen测试,先新增一个符合条件的学生

SpringBoot入门基础学习(二)_第4张图片

数据库新增成功


添加一条不符合验证的数据

SpringBoot入门基础学习(二)_第5张图片

添加失败,控制台打印出错误信息


二、AOP统一处理请求日志

APO(面向切面)是一种编程范式,与语音无关,是一种程序设计思想。除了AOP我们听过OOP(面向对象)、POP(面向过程)

一个网络请求的生命周期:收到HttpReqeust请求--->记录请求--->处理网络请求--->生成HttpResponse--->记录回复

操作数据库的生命周期:收到数据库操作请求--->记录请求--->增删查改--->生成处理结果--->记录回复

在上面两个生命周期中,可以分为三步1-2是请求、3-4是业务逻辑处理、5是回复 

1、@Before运行方法前拦截操作

第一步:在pom文件中添加依赖

SpringBoot入门基础学习(二)_第6张图片

第二步:创建处理文件@Component引入Spring容器,@Before中填写需要拦截的方法名或整个类,log()方法中处理这些拦截下来的请求。

SpringBoot入门基础学习(二)_第7张图片

我们用Postmen访问

SpringBoot入门基础学习(二)_第8张图片

控制台打印拦截信息

SpringBoot入门基础学习(二)_第9张图片

如果我们想拦截整个类中的所有方法可以

SpringBoot入门基础学习(二)_第10张图片

2、@After运行方法后拦截操作

SpringBoot入门基础学习(二)_第11张图片

SpringBoot入门基础学习(二)_第12张图片

Postmen中测试

SpringBoot入门基础学习(二)_第13张图片

控制台打印

SpringBoot入门基础学习(二)_第14张图片

在上面代码中,我们又写了很多重复的代码,在开发是我们应该避免写重复的代码,这样后期维护比较容易

SpringBoot入门基础学习(二)_第15张图片

解决方法:@Pointcut()提取公共部分

SpringBoot入门基础学习(二)_第16张图片

使用Logger打印日志

SpringBoot入门基础学习(二)_第17张图片

控制台打印

SpringBoot入门基础学习(二)_第18张图片

3、记录每个http请求

SpringBoot入门基础学习(二)_第19张图片

Postmen测试

SpringBoot入门基础学习(二)_第20张图片

控制台打印日志

SpringBoot入门基础学习(二)_第21张图片

4、获取请求返回的内容

SpringBoot入门基础学习(二)_第22张图片

由于返回的是一个对象,在类中添加toString方法可看到具体的参数值

SpringBoot入门基础学习(二)_第23张图片

Postmen测试

SpringBoot入门基础学习(二)_第24张图片

控制台打印

SpringBoot入门基础学习(二)_第25张图片

三、统一异常处理

1、统一返回

前面我们在做表单验证的时候,添加一个学生信息,学生年龄必须要大于18岁,在我们处理返回数据时如果满足条件返回时一个对象,如果不符合条件,返回的是提示语句,这样返回没有统一的格式,比较乱,下面我们做一个统一的返回。

SpringBoot入门基础学习(二)_第26张图片

先写一个公共请求返回类,添加get\set方法

SpringBoot入门基础学习(二)_第27张图片

添加统一放回方法

SpringBoot入门基础学习(二)_第28张图片

原来的新增方法

SpringBoot入门基础学习(二)_第29张图片

修改后


Postmen测试

成功

SpringBoot入门基础学习(二)_第30张图片

失败

SpringBoot入门基础学习(二)_第31张图片

2、假设我们查询年龄小于10和10-16的学生是异常的

SpringBoot入门基础学习(二)_第32张图片

SpringBoot入门基础学习(二)_第33张图片

Postman测试

SpringBoot入门基础学习(二)_第34张图片

打印的格式,与我们定义的格式不同,则需要建一个捕获异常

SpringBoot入门基础学习(二)_第35张图片

Postman测试

SpringBoot入门基础学习(二)_第36张图片

上边的测试中,我们的code是固定的,我们想要code灵活使用,则需要自定义异常

定义异常,继承RuntimeException可以事务回滚,而继承Exception是不能事务回滚的

SpringBoot入门基础学习(二)_第37张图片

SpringBoot入门基础学习(二)_第38张图片

SpringBoot入门基础学习(二)_第39张图片

Postmen测试

SpringBoot入门基础学习(二)_第40张图片

现在异常只会显示我们定义的异常信息,如果我们想打印系统异常所有信息,可以打印异常日志

SpringBoot入门基础学习(二)_第41张图片

3、统一管理code和message,就需要用到枚举

创建一个包和枚举类

SpringBoot入门基础学习(二)_第42张图片

类方法

SpringBoot入门基础学习(二)_第43张图片

调用方法

SpringBoot入门基础学习(二)_第44张图片

SpringBoot入门基础学习(二)_第45张图片

Postmen测试

SpringBoot入门基础学习(二)_第46张图片五、单元测试

1、service测试

需要测试的方法

SpringBoot入门基础学习(二)_第47张图片

测试类,数据库中id=8的,年龄=9

SpringBoot入门基础学习(二)_第48张图片


SpringBoot入门基础学习(二)_第49张图片

编译

SpringBoot入门基础学习(二)_第50张图片

SpringBoot入门基础学习(二)_第51张图片

如果我们改为

SpringBoot入门基础学习(二)_第52张图片

控制台报错

SpringBoot入门基础学习(二)_第53张图片

idea工具也提供了更便捷自动生成测试类的方法

在service中选中方法名,右键go to 选中test

SpringBoot入门基础学习(二)_第54张图片

2、对Controller、API测试测试

我们测试studentList,创建测试类

SpringBoot入门基础学习(二)_第55张图片

SpringBoot入门基础学习(二)_第56张图片

SpringBoot入门基础学习(二)_第57张图片

自动生成

SpringBoot入门基础学习(二)_第58张图片

测试代码

SpringBoot入门基础学习(二)_第59张图片

控制台

SpringBoot入门基础学习(二)_第60张图片

如果修改了url

SpringBoot入门基础学习(二)_第61张图片

控制台

SpringBoot入门基础学习(二)_第62张图片

系统打包的时候会自动把所有的测试用例都运行一遍,报错的话会打印报错信息


你可能感兴趣的:(SpringBoot,SpringBoot)