spring boot项目如何自定义参数校验规则

spring boot项目对参数进行校验时,比如非空校验,可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验,自带的校验规则无法满足要求,此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样,先自定义一个注解,然后指定校验类,在校验类里实现具体的校验规则。

下面以校验手机号为例,来实现自定义参数校验规则。

首先定义一个注解,直接照着NotNull注解定义即可。

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//这里的class就是实现具体校验规则的类
@Constraint(validatedBy = {MobileNoValidator.class})
public @interface MobileNo {

    String message() default "请输入正确的手机号";

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

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

}

然后定义实现具体校验规则的类,这个类要实现ConstraintValidator接口。

public class MobileNoValidator implements ConstraintValidator<MobileNo, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if ((value == null)) {
            return false;
        }
        String regex = "^1\\d{10}$";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(value);
        return m.matches();
    }
}

这样,很简单的两个类,就实现了自定义参数校验规则。当参数中加了MobileNo注解,如果输入的手机号不满足1打头的11位数字的规则,就会抛出异常信息。下面写个controller简单测试一下。

先定义一个vo。

public class UserVo {

    @NotNull
    private Long id;

    @NotNull
    @MobileNo
    private String mobileNo;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getMobileNo() {
        return mobileNo;
    }

    public void setMobileNo(String mobileNo) {
        this.mobileNo = mobileNo;
    }
}

再定一个controller。

@RestController
public class UserController {

    @PostMapping(value = "/test")
    public String test(@Validated @RequestBody UserVo userVo) {
        return "success";
    }
}

启动项目,用postman测试一下。

首先输入符合要求的手机号,这时是能正常返回success。

然后输入一个不符合要求的手机号,会返回400错误码,错误信息如下。当然这里返回的错误信息比较不友好,实际项目中可以对参数校验异常统一拦截,返回需要的数据格式。

相关推荐

  1. SpringBoot】分组校验定义校验

    2023-12-08 08:26:04       64 阅读
  2. Vue中的定义参数校验

    2023-12-08 08:26:04       46 阅读
  3. SpringBoot项目如何使用校验工具

    2023-12-08 08:26:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 08:26:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 08:26:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 08:26:04       82 阅读
  4. Python语言-面向对象

    2023-12-08 08:26:04       91 阅读

热门阅读

  1. 使用python脚本轻松实现ssh免密登陆配置

    2023-12-08 08:26:04       65 阅读
  2. nginx 一键切换停机维护页面 —— 筑梦之路

    2023-12-08 08:26:04       52 阅读
  3. 生成对抗网络GAN中的潜向量Z是用来做什么的?

    2023-12-08 08:26:04       58 阅读
  4. Docker实战笔记 三 Docker私有库

    2023-12-08 08:26:04       39 阅读
  5. 图表管理功能(前后端实现增删改查)

    2023-12-08 08:26:04       46 阅读
  6. 微信小程序 - 文件工具类 fileUtil.js

    2023-12-08 08:26:04       51 阅读
  7. 第59天:django学习(八)

    2023-12-08 08:26:04       51 阅读
  8. Git初学入门指令

    2023-12-08 08:26:04       49 阅读
  9. 策略模式终极解决方案之策略机

    2023-12-08 08:26:04       45 阅读
  10. 鸿蒙(HarmonyOS)应用开发——构建页面(题目答案)

    2023-12-08 08:26:04       128 阅读