一款常用的后端校验框架,官方链接
依赖
<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 //步骤1
public 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容器中即可
@Configuration
public class ValidatorCfg {
@Bean
public 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> {
@Override
public boolean isValid(Short num,
ConstraintValidatorContext constraintValidatorContext) {
//返回false校验失败,会抛出异常
return num == null || num == 0 || num == 1;
}
}
}
�外界使用
import lombok.Data;
@Data
public class DictItem {
//是否禁用。0代表不禁用(启用),1代表禁用
@BoolNumber
private Short disabled;
}