当前位置: 首页 > news >正文

Spring Validation参数校验

Spring Validation是Spring框架中用于数据校验的核心模块,通过注解简化数据校验逻辑。

1. 依赖引入(SpringBoot项目)

Spring Boot项目:自动包含spring-boot-starter-validation

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

2. 基本使用

在Spring MVC的Controller中使用@Valid和@Validated触发校验。

示例代码:

@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody @Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        // 处理校验错误
        return ResponseEntity.badRequest().body(result.getAllErrors());
    }
    // 保存用户
    return ResponseEntity.ok(userService.save(user));
}
  • @Valid:触发校验
  • @Validated:Spring的扩展,支持分组校验
  • BindingResult:保存校验结果,需紧跟被校验参数

3. 常用校验注解

以下是Bean Validation内置的校验注解:

注解说明
@NotNull值不能为null
@NotEmpty字符串/集合不能为空
@NotBlank字符串必须包含非空格字符
@Size(min, max)字符串/集合长度在范围内
@Min(value)数字最小值
@Max(value)数字最大值
@Email校验邮箱格式
@Pattern(regexp)正则表达式匹配
@Positive必须为正数
@Future日期必须是未来时间

示例实体类:

public class User {
    @NotBlank(message = "用户名不能为空")
    private String username;

    @Size(min = 6, max = 20, message = "密码长度需在6-20位")
    private String password;

    @Email(message = "邮箱格式不正确")
    private String email;

    // Getters and Setters
}

4.分组校验

通过分组实现不同场景的差异化校验规则。

定义分组接口:

public interface CreateGroup {}
public interface UpdateGroup {}

在实体中使用分组:

public class User {
    @Null(groups = CreateGroup.class, message = "创建时ID必须为空")
    @NotNull(groups = UpdateGroup.class, message = "更新时ID不能为空")
    private Long id;

    // 其他字段...
}

在Controller中指定分组:

@PostMapping("/users")
public ResponseEntity<?> createUser(@Validated(CreateGroup.class) @RequestBody User user) {
    // ...
}

5. 自定义校验

步骤1:定义注解

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

步骤2:实现校验逻辑

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

步骤3:使用自定义注解

public class User {
    @Phone
    private String phone;
}

相关文章:

  • P1118 [USACO06FEB] Backward Digit Sums G/S
  • 前端项目的构建流程无缝集成到 Maven 生态系统(一)
  • C Sharp 集合
  • 包装类简单认识泛型
  • 音视频入门基础:RTCP专题(1)——RTCP官方文档下载
  • C/C++实现工厂模板设计模式(Factory Pattern)
  • 多模态RAG框架(一)ViDoRAG:Visual Document RAG via Dynamic Iterative Reasoning Agents
  • 【一起来学kubernetes】14、StatefulSet使用详解
  • 开箱即用的whisper-service服务
  • ccf3501密码
  • 重生之我在学Vue--第15天 Vue 3 动画与过渡实战指南
  • [IP]UART
  • HTML深度解读
  • [特殊字符] 轻松掌握JavaScript DOM:从入门到实战 [特殊字符]
  • Centos内核升级
  • C#的字符串之String类与StringBuilder类区别于适用场景
  • 基于物联网的幼儿看护辅助系统设计方案
  • [leetcode] 面试经典 150 题——篇3:滑动窗口
  • Excel(函数篇):IF函数、FREQUNCY函数、截取函数、文本处理函数、日期函数、常用函数详解
  • C# 异常处理‌的核心概念
  • 两次通话、三点诉求,泽连斯基对美称愿与俄签署和平备忘录
  • 述评:赖清德当局上台一年恶行累累
  • 消费维权周报丨上周涉汽车类投诉较多,涉加油“跳枪”等问题
  • 大学2025丨专访西湖大学副校长邓力:如何才能培养“不惧未知”的创新者
  • 人民日报头版:紧盯“学查改”,推动作风建设走深走实
  • 外媒:哈马斯一名高级指挥官尸体被发现,系辛瓦尔弟弟