从0开始搭建一个生产级SpringBoot2.0.X项目(五)使用 validation 验证参数
前言
最近有个想法想整理一个内容比较完整springboot项目初始化Demo。
使用 validation 验证参数
一、pom文件增加引入
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
二、新增接口入参实体类TestValidationReq.java
package com.murg.bootdemo.business.req;import lombok.Data;import javax.validation.Valid;
import javax.validation.constraints.*;
@Data
public class TestValidationReq {@Max(value=60,message = "age不能超过60")@Min(value=18,message = "age不能小于18")private String age;@NotBlank(message = "name不能为空或者空格")private String name;@Size(min=5, max=10,message = "content字符长度在5-100之间")private String content;}
三、TestRestController.java新增接口
增加验证的接口/testvalidation,入参@RequestBody表示接收json传递的实体bean入参,@Validated表示验证这个实体入参,BindingResult为验证的结果。
@PostMapping("/testvalidation")public WebResult validation(@Validated @RequestBody TestValidationReq req, BindingResult results) {//把实体注解中的错误信息返回if (results.hasErrors()) {return WebResult.wrong( results.getFieldError().getDefaultMessage());}return WebResult.ok();}
四、测试
4.1 入参age传1
4.2 入参name传 ""
4.3 content传 "1"
五、递归校验
如果 入参TestValidationReq类中增加一个 reqVO 类的属性,而 reqVO 中的属性也需要校验,就用到递归校验了,只要在相应属性上增加@Valid
注解即可实现(对于集合同样适用)
新建reqVO类
package com.murg.bootdemo.business.req;import lombok.Data;import javax.validation.constraints.NotBlank;
@Data
public class ReqVO {@NotBlank(message = "sex不能为空")private String sex;
}
TestValidationReq字段增加reqVO 字段加@Valid注解 进行递归校验
package com.murg.bootdemo.business.req;import lombok.Data;import javax.validation.Valid;
import javax.validation.constraints.*;
@Data
public class TestValidationReq {@Max(value=60,message = "age不能超过60")@Min(value=18,message = "age不能小于18")private String age;@NotBlank(message = "name不能为空或者空格")private String name;@Size(min=5, max=10,message = "content字符长度在5-100之间")private String content;@Validprivate ReqVO reqVO;}
测试递归校验 入参 sex 传空