背景
在使用springboot进行后端开发的时候,经常会遇到数据校验的问题, 有时候可能默认的校验器不足以满足自己的需求, 这个时候就需要开发一个自己的校验器
在 Spring Boot 中自定义参数校验器通常涉及以下几个步骤:
1. 定义注解
首先需要定义一个自定义的注解,该注解将用于标记需要校验的字段。
java
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
// 实现真正校验逻辑的验证器
@Constraint(validatedBy = NotAllEmptyValidator.class)
// 注解放置于类上方
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface NotAllEmpty {
String message() default "不允许所有参数为空";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] fields default {};
}
在这个例子中,我们定义了一个名为 NotAllEmpty
的注解,并指定了它使用 NotAllEmptyValidator
类进行验证。同时定义了默认的错误消息。
2. 创建校验器
接下来需要创建一个实现 ConstraintValidator
接口的类来实现具体的校验逻辑。
java
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Collection;
public class NotAllEmptyValidator implements ConstraintValidator<NotAllEmpty, Object> {
@Override
public void initialize(NotAllEmpty constraintAnnotation) {
// 可以在这里初始化一些配置项
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
// 加入自己的验证逻辑
return false;
}
}
这个 NotAllEmptyValidator
类实现了 ConstraintValidator<NotAllEmpty, Object>
接口,其中 isValid
方法负责检查传入的集合是否为空。
3. 使用自定义注解
最后可以在需要校验的实体类或方法上使用这个自定义注解。
java
import javax.validation.constraints.NotNull;
import java.util.List;
@NotAllEmpty(fields={"name", "age"})
public class MyEntity {
private String name;
private Integer age;
// Getter and Setter
}
或者在控制器的方法参数上使用:
java
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@PostMapping("/save")
public String save(@RequestBody @NotAllEmpty MyEntity reqBody) {
// ...
}
}
4. 配置 Bean Validation
确保 Spring Boot 应用已经启用了 Bean Validation,这通常是通过添加 spring-boot-starter-validation
依赖自动完成的。
如果使用 Maven,可以添加如下依赖:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
如果使用 Gradle,则添加:
groovy
implementation 'org.springframework.boot:spring-boot-starter-validation'
以上就是如何在 Spring Boot 中创建和使用自定义参数校验器的基本流程。你可以根据自己的需求调整注解和校验器的具体实现细节。