@valid注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则,而在api接收数据时添加@valid关键字,这时你的实体将会开启一个校验的功能,具体的代码如下,是最基本的应用:
实体:
?
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class departmentdto {
@apimodelproperty("id")
private string id;
@apimodelproperty("上级id")
private string parentid;
@apimodelproperty("编号")
@notblank(message = "部门编号不能为空。")
private string code;
@apimodelproperty("名称")
@notblank(message = "部门名称不能为空。")
private string name;
@apimodelproperty("员工集合")
@builder.default
private list<employee> employees = new arraylist<>();
}
|
restful接口:
?
|
1
2
3
4
5
6
7
8
9
10
|
@postmapping()
public response<clientaccount> initialaccount(
@apiparam("客户编号") @pathvariable string code,
@apiparam("账期") @pathvariable yearmonth accountperiod,
@apiparam("请求体") @valid @requestbody request<departmentdto> request) {
clientaccount result = clientaccountservice.initialaccount(
code,
accountperiod,
request.getoperator(),
request.getbody());{}
|
上面代码中,我们为请求体request<departmentdto>添加了校验,在测试时,如果你的departmnetdto.name为空字符时,当出现400的异常,丽时异常消息是『部门名称不能为空』,这对于我们来说是没有问题的,也是符合我们要求的,下面看另一个场景。
需要验证的实体是另一个实休的属性
这种方式我们也需要会看到,一个大对象,如被封装的其它小对象组成,比如部门下面有员工,这时如果需要验证员工的有效性,需要如何实现呢?如果我们不修改源代码,执行结果是否定的, 它并不会校验员工这个对象,而只针对第一层对象的属性 。
我们将实体的员工属性添加上@valid即可实现对这个属性的校验
?
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class departmentdto {
@apimodelproperty("id")
private string id;
@apimodelproperty("上级id")
private string parentid;
@apimodelproperty("编号")
@notblank(message = "部门编号不能为空。")
private string code;
@apimodelproperty("名称")
@notblank(message = "部门名称不能为空。")
private string name;
@valid
@apimodelproperty("员工集合")
@builder.default
private list<employee> employees = new arraylist<>();
}
|
下面看一下验证结果,我们的400错误就可以在单元测试下面正常输出了!
?
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
@test
public void initialaccount_employee_name_empty() {
list<employee> employees = new arraylist<>();
employees.add(employee.builder()
.name("")
.email("zzl@sina.com")
.idnumber("110111198203182012")
.build());
list<departmentdto> departments = new arraylist<>();
departments.add(departmentdto.builder()
.name("部门")
.description("技术部")
.salarytype(salarytype.researchanddevelopmentcosts)
.employees(employees)
.build());
clientaccountdto clientaccountdto = clientaccountdto.builder()
.name("客户")
.departments(departments)
.build();
request<clientaccountdto> request = buildrequest(clientaccountdto);
api.post()
.uri("/v1/12345/2018-03")
.body(bodyinserters.fromobject(request))
.exchange()
.expectstatus().isequalto(400)
.expectbody()
.jsonpath("$.errors[0].message").isequalto("姓名不能为空");
}
|
结果如下,测试通过
如果是测试它是isok的话,由于用户名为空,所以会出现错误提示
?
|
1
2
3
4
5
|
api.post()
.uri("/v1/12345/2018-03")
.body(bodyinserters.fromobject(request))
.exchange()
.expectstatus().isok();
|
可以看一下结果的提示信息
总结
以上所述是小编给大家介绍的springboot @valid注解对嵌套类型的校验,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!
原文链接:http://www.cnblogs.com/lori/p/9088380.html
相关文章
猜你喜欢
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-25 53
-
2025-06-04 102
-
2025-05-27 89
-
2025-05-25 96
-
2025-05-29 83
热门评论




