一款常用的后端校验框架,官方链接
依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
基本使用
Domain Model模型参数
- 在Domain Model的getter或成员变量上加校验注解 ```java import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data public class DictType { //主键 private Integer id;
@NotBlank(message = "名称不能为空")private String name;@NotBlank(message = "值称不能为空")private String value;//简介private String intro;
}
2. 在使用Domain Model参数前加@Valid```java@PostMapping("/save")public Map<String,Object> save(@Valid DictType dictType){}
当校验失败时会抛出异常
org.springframework.validation.BindException
可以通过BindException.getBindingResult().getAllErrors()拿到所有异常信息
非Domain Model的方法参数
方法的参数是String、基本类型等
@PostMapping("/remove")public Map<String,Object> remove(String id){}
校验步骤:
- 在Controller上加@Validated注解
在方法参数前加校验注解
@RestController@Validated //步骤1public class DictTypeController {@PostMapping("/remove")public Map<String,Object> remove( @NotBlank(message = "id不能为空") String id)//步骤2{}}
校验失败时,会抛出如下异常
javax.validation.ConstraintViolationException
可以通过ConstraintViolationException异常的getConstraintViolations()方法获取所有的异常信息
快速抛出异常
一个方法里面可能存在很多个检测注解
public Map<String,Object> remove( @NotBlank(message = "id不能为空") @NotEmpty(message = "id不能为空且长度大于0") String id){}
默认情况下检查所有的错误后再统一抛出,如果想当检测到一个错误后就直接抛出异常,不再往下检测,可以进行如下配置,只需把Validator加到Spring容器中即可
@Configurationpublic class ValidatorCfg {@Beanpublic Validator validator() {ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class ).configure().failFast(true).buildValidatorFactory();return validatorFactory.getValidator();}}
自定义校验
@Documented@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = BoolNumber.BoolNumberValidator.class)public @interface BoolNumber {//message、groups、payload可以理解固定写法,不写就会报错String message() default "只能是0或1";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};//BoolNumber为注解名称,这里的Short为要验证的值的类型是什么类型,这里为short类型class BoolNumberValidator implements ConstraintValidator<BoolNumber, Short> {@Overridepublic boolean isValid(Short num,ConstraintValidatorContext constraintValidatorContext) {//返回false校验失败,会抛出异常return num == null || num == 0 || num == 1;}}}
�外界使用
import lombok.Data;@Datapublic class DictItem {//是否禁用。0代表不禁用(启用),1代表禁用@BoolNumberprivate Short disabled;}
