背景
在使用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> {@Overridepublic void initialize(NotAllEmpty constraintAnnotation) {// 可以在这里初始化一些配置项}@Overridepublic 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,可以添加如下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
如果使用 Gradle,则添加:
implementation 'org.springframework.boot:spring-boot-starter-validation'
以上就是如何在 Spring Boot 中创建和使用自定义参数校验器的基本流程。你可以根据自己的需求调整注解和校验器的具体实现细节。
5. 参考文档
Spring MVC Custom Validation
jboss相关章节