在springboot中实现参数校验

本文介绍了BeanValidation中的内置Constraint约束,如@NotNull、@NotBlank等,并展示了如何在SpringBoot项目中集成和使用这些约束,以及自定义注解进行手机号格式验证的过程。
摘要由CSDN通过智能技术生成

使用Bean validation(JSR303)

1.Bean Validation 中内置的 constraint 约束

| Constraint                    | 详细信息                                                     |
| :---------------------------- | :----------------------------------------------------------- |
| @Null                         | 被注释的元素必须为 `null`                                    |
| @NotNull                      | 被注释的元素必须不为 null【一般用于非字符串】                |
| @NotBlank                     | 字符串不能为null 和空字符串"",会去掉前后空格【一般用于字符串】 |
| @NotEmpty                     | 集合长度不能为0【一般用于集合】                              |
| `@AssertTrue`                 | 被注释的元素必须为 `true`                                    |
| `@AssertFalse`                | 被注释的元素必须为 `false`                                   |
| `@Min(value)`                 | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值     |
| `@Max(value)`                 | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值     |
| `@DecimalMin(value)`          | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值     |
| `@DecimalMax(value)`          | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值     |
| `@Size(max, min)`             | 被注释的元素的大小必须在指定的范围内                         |
| `@Digits (integer, fraction)` | 被注释的元素必须是一个数字,其值必须在可接受的范围内         |
| `@Past`                       | 被注释的元素必须是一个过去的日期                             |
| `@Future`                     | 被注释的元素必须是一个将来的日期                             |
| `@Pattern(value)`             | 被注释的元素必须符合指定的正则表达式                         |

2.在springboot中使用

导包

<!--用2.3.0会导致后面notempty注解不生效
如果用的是2.3.0以后的版本也可以添加如下依赖即可解决-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

实体类字段上加注解
@NotBlank(message = "名称不可为空")
private String name;

对象参数前加注解@Validated
public JSONResult register(@RequestBody @Validated RegisterParamDto dto)

3自定义注解实现校验(对手机号)

定义校验注解

@Target( ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = PhoneValidator.class)//此处指定了校验规则/器
public @interface Phone {
    //SpringValidator必要的三个属性
    String message() default "无效的手机格式";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
定义校验器
@Service
public class PhoneValidator implements ConstraintValidator<Phone, String> {

    private static final String PHONE_REGEX = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0-9]))\\d{8}$";

    @Override
    public void initialize(Phone constraintAnnotation) {
        //初始化
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        //对值进行手机号正则判断
        Pattern p = Pattern.compile(PHONE_REGEX);
        Matcher m = p.matcher(value);
        return m.matches();
    }
}
使用校验注解
@Phone
private String phone;
 对象参数前加注解@Validated
public JSONResult register(@RequestBody @Validated RegisterParamDto dto)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值