Spring Boot 自动参数校验的实现步骤

 更新时间:2025年06月03日 10:18:51   作者:yuren_xia  
在 Spring Boot中实现参数自动校验主要依靠 Java Bean Validation API(JSR 380)和 Spring 的集成支持,下面给大家介绍Spring Boot 自动参数校验的实现步骤,感兴趣的朋友一起看看吧

在 Spring Boot 中实现参数自动校验主要依靠 Java Bean Validation API(JSR 380)和 Spring 的集成支持。以下是详细实现步骤:

1. 添加依赖

pom.xml 中添加验证依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2. 在实体类/DTO中添加校验注解

使用注解标记需要校验的字段:

public class UserDTO {
    @NotBlank(message = "用户名不能为空")
    private String username;
    @Email(message = "邮箱格式不正确")
    private String email;
    @Min(value = 18, message = "年龄必须大于18岁")
    private int age;
    @Pattern(regexp = "1[3-9]\\d{9}", message = "手机号格式不正确")
    private String phone;
    // Getter/Setter省略
}

常用校验注解

  • @NotNull:非 null
  • @NotBlank:非空(字符串)
  • @NotEmpty:非空集合/数组
  • @Min/@Max:数值范围
  • @Size:长度范围
  • @Email:邮箱格式
  • @Pattern:正则表达式

3. 在Controller中使用校验

在接收参数的请求方法中添加 @Valid@Validated

@PostMapping("/create")
public ResponseEntity<?> createUser(@Valid @RequestBody UserDTO userDTO) {
    // 校验通过后执行业务逻辑
    return ResponseEntity.ok("用户创建成功");
}

注意@Valid 是标准 JSR 注解,@Validated 是 Spring 的增强版(支持分组校验)。

4. 处理校验异常

添加全局异常处理器捕获校验失败异常:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationException(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getFieldErrors().forEach(error -> {
            errors.put(error.getField(), error.getDefaultMessage());
        });
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors);
    }
}

响应示例

{
    "username": "用户名不能为空",
    "email": "邮箱格式不正确"
}

5. 进阶用法

分组校验(不同场景不同规则)

定义分组接口:

public interface CreateGroup {}
public interface UpdateGroup {}

在 DTO 中指定分组:

public class UserDTO {
    @NotNull(groups = UpdateGroup.class, message = "ID不能为空")
    private Long id;
    @NotBlank(groups = {CreateGroup.class, UpdateGroup.class})
    private String name;
}

Controller 指定分组:

@PostMapping("/update")
public void updateUser(@Validated(UpdateGroup.class) @RequestBody UserDTO dto) {
    // ...
}

自定义校验注解

创建自定义注解:

@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = PhoneValidator.class)
public @interface ValidPhone {
    String message() default "手机号格式错误";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

实现校验逻辑:

public class PhoneValidator implements ConstraintValidator<ValidPhone, String> {
    @Override
    public boolean isValid(String phone, ConstraintValidatorContext context) {
        return phone != null && phone.matches("1[3-9]\\d{9}");
    }
}

6. 测试校验

使用 Postman 或 curl 发送无效请求:

curl -X POST http://localhost:8080/create \
-H "Content-Type: application/json" \
-d '{"username":"", "email":"invalid-email"}'

将返回:

{
    "username": "用户名不能为空",
    "email": "邮箱格式不正确"
}

总结流程:

graph TD
    A[添加依赖] --> B[DTO添加校验注解]
    B --> C[Controller添加@Valid]
    C --> D[全局异常处理器]
    D --> E[返回错误信息]

通过以上步骤,Spring Boot 会自动完成参数校验,无需手动编写校验逻辑,大幅提升开发效率。

到此这篇关于Spring Boot 自动参数校验的文章就介绍到这了,更多相关Spring Boot 自动参数校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中实现多文件打包下载的两种方案

    SpringBoot中实现多文件打包下载的两种方案

    在Spring Boot中实现多文件打包下载,一般是将多个文件压缩成一个ZIP文件再进行下载,以下是两种典型实现方案以及代码示例,需要的朋友可以参考下
    2025-09-09
  • IntelliJ IDEA 2020.1 EAP4 发布,重命名/更改签名新功能一览

    IntelliJ IDEA 2020.1 EAP4 发布,重命名/更改签名新功能一览

    这篇文章主要介绍了IntelliJ IDEA 2020.1 EAP4 发布,重命名/更改签名新功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • JAVA Frame 窗体背景图片,首位相接滚动代码实例

    JAVA Frame 窗体背景图片,首位相接滚动代码实例

    这篇文章主要介绍了JAVA Frame 窗体背景图片,首位相接滚动代码示例,需要的朋友可以参考下复制代码
    2017-04-04
  • 浅谈Java abstract关键字不能和哪些关键字共存

    浅谈Java abstract关键字不能和哪些关键字共存

    本文主要介绍了Java abstract关键字不能和哪些关键字共存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10
  • java日志LoggerFactory.getLogger的用法及说明

    java日志LoggerFactory.getLogger的用法及说明

    这篇文章主要介绍了java日志LoggerFactory.getLogger的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • mybatis-plus主键id生成、字段自动填充的实现代码

    mybatis-plus主键id生成、字段自动填充的实现代码

    这篇文章主要介绍了mybatis-plus主键id生成、字段自动填充的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java迭代器与Collection接口超详细讲解

    Java迭代器与Collection接口超详细讲解

    Collection也称集合,集合概述:集合是Java中提供的一种容器,可以用来存储多个数据。Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合
    2022-07-07
  • springboot统一接口返回数据的实现

    springboot统一接口返回数据的实现

    这篇文章主要介绍了springboot统一接口返回数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • IDEA2021安装及常用功能设置

    IDEA2021安装及常用功能设置

    这篇文章主要介绍了IDEA2021安装及常用功能设置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • java使用DOM4J对XML文件进行增删改查操作

    java使用DOM4J对XML文件进行增删改查操作

    这篇文章主要为大家详细介绍了java使用DOM4J对XML文件进行增删改查操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论