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

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;
}


http://www.kler.cn/a/588127.html

相关文章:

  • LSTA: Long Short-Term Attention for Egocentric Action Recognition
  • 基于云的内容中台驱动企业智能服务升级
  • 卷积神经网络(知识点)
  • C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色
  • PostreSQL指南-内幕探索-学习笔记-01-数据库集簇的逻辑与物理结构
  • 【Linux】五种 IO 模型与非阻塞 IO
  • cursor使用
  • MyBatis相关的面试题
  • 【Qt】qrc机制介绍
  • 记一次小程序爬虫(反编译-自动化字体映射生成)
  • ctf-web: 简单java反序列化示例
  • FakeApp 技术浅析(四):卷积神经网络
  • 线程-进阶
  • C语言之共用体
  • ETL与ELT核心技术解析:如何选择最优数据集成方案
  • 树莓科技(成都)集团:如何铸就第五代产业园标杆
  • BUG日志:Maven项目启动报错(文件名或者文件扩展名过长)
  • 2.2[frontEnd]ESLint
  • android 通过action启动Activity拦截,Activity应用组件添加intent-filter priority(优先级)不生效
  • AF3 make_pseudo_beta函数解读