springboot后端开发-自定义参数校验器

背景

在使用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 中创建和使用自定义参数校验器的基本流程。你可以根据自己的需求调整注解和校验器的具体实现细节。

5. 参考文档

Spring MVC Custom Validation
jboss相关章节

相关推荐
Daniel 大东24 分钟前
BugJson因为json格式问题OOM怎么办
java·安全
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象6 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·7 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王7 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康7 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
qq_17448285757 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序