springboot JSR 303参数校验使用

一、使用场景:

在我们应用程序的业务逻辑中,经常会碰到参数校验的情况,比如在Controller中,我们的参数是一个Entity的时候,经常要判断这个Entity的字段是否是null之类或者是长度等。通常来讲,我们用比如StringUtils或者是if等来进行教研,这样在我们的代码层上面就会带来很不好的体验,阅读、维护的成本会大大增加,造成冗余。因此有了这个JSR 303。

二、添加pom.xml依赖

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

三、如何使用

1.当方法接收的参数需要参数校验时,在参数前面加上 @Valid 注解

@RequestMapping("/test")
@ResponseBody
public Result<Boolean> test(@Valid LoginVo loginVo){
    return Result.success(true);
}

2.这个对象中的字段需要满足什么校验, 就需要在它的字段前加上对应的注解,它原本提供的注解就有很多,如下图所示。
在这里插入图片描述

public class LoginVo {

    @NotNull
    @IsMobile
    private String mobile;

    @NotNull
    private String password;
}

3.还可以自定义你需要的注解功能,比如上面的@IsMobile 判断是否为手机号码


参数校验注解
// 这些内容你可以打开原本就提供的注解,复制过来,都是一样的
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
		// 指向对应的参数校验实现类
        validatedBy = {IsMobileValidator.class}
)
public @interface IsMobile {

    boolean requeired() default false;

    String message() default "手机号码格式有误";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

参数校验类

// 唯一需要注意的就是实现ConstraintValidator<IsMobile, String>接口
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {

    private boolean required = false;

	// 初始化
    @Override
    public void initialize(IsMobile constraintAnnotation) {
        required = constraintAnnotation.requeired();
    }
	// 参数校验逻辑
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
    // value就是注解字段对应的值,你要对这个值如何校验,就来这里实现就好了。
        if(required){
            return ValidatorUtil.isMobile(value);
        }else {
            if(StringUtils.isEmpty(value)){
                return true;
            }else {
                return ValidatorUtil.isMobile(value);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值