springboot @Valid注解对嵌套类型的校验功能

2025-05-29 0 55

@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("姓名不能为空");

}

结果如下,测试通过

springboot @Valid注解对嵌套类型的校验功能

如果是测试它是isok的话,由于用户名为空,所以会出现错误提示

?

1

2

3

4

5
api.post()

.uri("/v1/12345/2018-03")

.body(bodyinserters.fromobject(request))

.exchange()

.expectstatus().isok();

springboot @Valid注解对嵌套类型的校验功能

可以看一下结果的提示信息

springboot @Valid注解对嵌套类型的校验功能

总结

以上所述是小编给大家介绍的springboot @valid注解对嵌套类型的校验,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!

原文链接:http://www.cnblogs.com/lori/p/9088380.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 springboot @Valid注解对嵌套类型的校验功能 https://www.kuaiidc.com/111750.html

相关文章

发表评论
暂无评论