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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值