@Valid @Validated 是什么? 如何快速实现参数校验

在实际开发中 少不了参数的验证,比如 某些必填项非空的检查、参数位数的校验等。。

当字段少的情况下 我们可以通过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 的异同点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值