在实际开发中 少不了参数的验证,比如 某些必填项非空的检查、参数位数的校验等。。
当字段少的情况下 我们可以通过if ...来进行判断,当字段多的情况下 代码就会变的很臃肿,可能光判断 就要很长一串代码了,哪有没有什么方法 让我们简化这些必要的判断呢?
if(username == null || username.isEmpty()){
String message = "username 未填";
}
if(password== null || password.isEmpty()){
String message = "password未填";
}
// 。。。。。 如果需要验证的变量很多的情况下 代码会很臃肿、增加很多工作量 并且不美观
这时候 就可以使用 @Valid 注解来实现快速的 参数校验
下面写一个简单的例子
参数校验是要加在成员变量里的 所以我们写一个实体类
public class UserInsertDTO implements Serializable {
/**
* 数据id
*/
private Long id;
/**
* 用户名
*/
@NotBlank(message = "账号不能为空")
private String username;
/**
* 密码(密文)
*/
@NotBlank(message = "密码不能为空")
@Max(value = 100)
@Min(value = 0)
private String password;
}
这样实体类就写完了。 再写一个调用它的 controller 类
@Slf4j
@RestController
@RequestMapping("/user/")
@Validated // 检查参数
@Api(tags = "1.用户管理模块")
public class UserController {
@ApiOperation("新增用户")//API文档方法名称
@ApiOperationSupport(order = 20)//API文档排序
@PostMapping("/saveUser") //↓↓↓↓↓↓↓↓↓ 增加注解
public JsonResult<Void> saveUser(@Validated UserInsertDTO userInsertDTO){
log.info("开始处理【添加用户】请求 {} " ,userInsertDTO);
userService.saveUser(userInsertDTO);
return JsonResult.ok();
}
}
其余代码我们先暂时不考虑 ,目前只考虑 与 @Valid 注解相关的。
至此 参数校验就完成了 username 和 password 都加上了非空的验证 及 按需求增加的一系列验证, 我们做了哪些事?
第一步 如果是 SpringBoot 项目 哪@Validated 注解 是可以开箱即用的。如果没有的话也不要着急
在POM文件里 加一下maven依赖
<!-- Spring Boot Validation依赖项 用于检查请求参数的基本格式-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
即可使用
第二步 实体类上增加@Validated 的注解做参数验证 下面列出一些@Validated的注解
@Null 限制只能为null
@NotNull 限制必须不为null
@NotEmpty 只作用于字符串类型,字符串不为空,并且长度不为0
@NotBlank 只作用于字符串类型,字符串不为空,并且trim()后不为空串
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位
数不能超过fraction
@Future 限制必须是一个将来的日期
@Past 验证注解的元素值(日期类型)比当前时间早
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
注意:
@NotNull 适用于任何类型被注解的元素必须不能与NULL
@NotEmpty 适用于String Map或者数组不能为Null且长度必须大于0
@NotBlank 只能用于String上面 不能为null,调用trim()后,长度必须大于0
第三步 在controller 的方法上 增加 @Validated 注解
至此 最简单的参数校验,就添加完毕,下节我们深入了解 @Valid 和 @Validated 的异同点。