栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义@Validated参数注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义@Validated参数注解

一、参数校验的实现

  1. 以前参数的校验大都通过编码的方式实现,如 Hutool 实现

    StrUtil.isNotEmpty(arg);
    StrUtil.isNotNull(arg);
    StrUtil.isNotBlank(arg);
    ……
    
  2. 最近认识了新成员 @Validated 和 @Valid
    关于两者的区别

    @Validated是org.springframework.validation.annotation.Validated,支持group分组
    @Valid是javax.validation.Valid

    实际使用时,可以使用两者的嵌套

    更多的高阶使用姿势,可参考:https://segmentfault.com/a/1190000022605819?utm_source=tag-newest

二、自定义一个 @Validated 参数注解

  1. 定义注解
    package com.example.validated.validation;
    
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import java.lang.annotation.*;
    
    
    @documented
    @Target({ElementType.PARAMETER, ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = IdentityCardNumberValidator.class)
    public @interface IdentityCardNumber {
    
        String message() default "身份证号码不合法";
    
        Class[] groups() default {};
    
        Class[] payload() default {};
    }
    
    
  2. 注解校验实现
    package com.example.validated.validation;
    
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    
    
    public class IdentityCardNumberValidator implements ConstraintValidator {
    
    
        @Override
        public void initialize(IdentityCardNumber constraintAnnotation) {
            ConstraintValidator.super.initialize(constraintAnnotation);
        }
    
        @Override
        public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
            return check(o.toString());
        }
    
        private boolean check(String arg) {
    
            // 具体的参数校验实现可以写在这儿
            return true;
        }
    }
    

三、全局异常处理

作用:让校验生效,即参数校验时如果不合法就会抛出异常,我们就可以在全局异常中捕获拦截到,然后进行逻辑处理之后再返回

@RestControllerAdvice
public class MyGlobalExceptionHandler {
	……
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号