SpringBoot验证类中字段
2020.05.17 17:20
2020.05.17 20:39
1. 前言
在实际项目中,一般情况下,可能都有很多字段为空等验证,那么如何做才能不用谢if-else等语句
也即是说,优雅的判断是否为空等操作?
我们可以使用validation
来校验传入的参数
2. 步骤
2.1. 添加包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
当然,如果你加上spring-boot-starter-web
的话,默认也就有了,不需要额外加
添加包后,就可以使用注解言自定义验证了
在实体类中,使用诸如@NotBlank
之类的注解,就可以验证了
@NotBlank(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
private String password;
两个问题:
1、有哪些注解可供使用?
2、如何返回验证失败的中,我们定义的message信息?
2.2. 使用
在需要验证的地方使用@Valid
注解即可,一般也就在Controller中使用,比如:
2.3. 可用注解
# JSR提供的校验注解:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
# Hibernate Validator提供的校验注解:
@NotBlank(message =) 验证字符串非null,且trim后长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
2.4. 异常捕获
这就需要全局异常捕获啦
我们这里捕获这个异常即可:MethodArgumentNotValidException
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public AppResult<Object> argumentsHandler(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
FieldError fieldError = bindingResult.getFieldError();
assert fieldError != null;
return AppResultBuilder.fail(fieldError.getDefaultMessage());
}
然后,获取getDefaultMessage
,其中就是我们之前使用注解定义的message
消息
本节阅读完毕!
(分享)