想要使用validated需要引入Jar包,有两个方式,选择一种即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
必须要引入,否则@validated不会生效
普通模式(默认是这个模式):会校验完所有的属性,然后返回所有的验证失败信息。
快速失败模式:只要有一个验证失败,则返回。
通常在实际开发中,我们需要配置快速失败模式,快速失败模式的配置方式:
package com.morris.validator.config;
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;@Configuration
public class ValidatorConfig {@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
// 快速失败模式
.failFast(true)
.buildValidatorFactory();
return validatorFactory.getValidator();
}
}
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
// 快速失败模式
//.failFast(true)
.addProperty( "hibernate.validator.fail_fast", "true" )
.buildValidatorFactory();
return validatorFactory.getValidator();
}
常用注解说明
@AssertFalse:
所注解的元素必须是Boolean类型,并且值为false
@AssertTrue:
所注解的元素必须是Boolean类型,并且值为true
@DecimalMax:
所注解的元素必须是数字,并且值要小于或等于给定的BigDecimalString值
@DecimalMin:
所注解的元素必须是数字,并且值要小于或等于给定的BigDecimalString值
@Digits:
所注解的元素必须是数字,并且它的值必须有指定的位数
@Email:
所注解的元素要匹配指定的正则表达式
@Max:
所注解的元素必须是数字,并且值要小于或等于给定的值。注意如果@Max所注解的元素是null,则@Max注解
会返回true,所以应该把@Max注解和@NotNull注解结合使用
@Min:
所注解的元素必须是数字,并且值要大于或等于给定的值。注意如果@Min所注解的元素是null,则@Min注解
会返回true,即也会通过校验,所以应该把@Min注解和@NotNull注解结合使用。
@NotBlank:
所注解的元素不能为null且不能为空白,用于校验CharSequence(含String、StringBuilder和StringBuffer)
@NotEmpty:
所注解的元素不能为null且长度大于0,可以是空白,用于校验CharSequence、数组、Collection和Map
@NotNull:
所注解的元素不能为null
@Null:
所注解的元素必须为null
@Pattern:
所注解的元素必须匹配指定的正则表达式。注意如果@Pattern所注解的元素是null,则@Pattern注解会返回
true,即也会通过校验,所以应该把@Pattern注解和@NotNull注解结合使用
@Size:
所注解的元素必须符合指定的大小,该注解可用于数组,CharSequence(含String、StringBuilder和
StringBuffer),Collection和Map。注意如果@Size所注解的元素是null,则@Size注解会返回true,即也
会通过校验,所以应该把@Size注解和@NotNull注解结合使用
eg:
- @Data
- public class Address {
-
- @NotBlank(message = "province不能为空")
- private String province;
-
- private String city;
- }
-
-
- import com.example.demovalidator.Vo.ResultVo;
- import com.example.demovalidator.enums.ErrorCode;
- import org.springframework.validation.FieldError;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- import java.util.Map;
- import java.util.stream.Collectors;
-
- @ControllerAdvice
- @ResponseBody
- public class CtrIAdvice {
- @PostMapping("/test")
- public ResultVo testValited(@Validated @RequestBody Address address){
- return ResultVo.fail("失败了");
- }
- }