java中如何”自定义验证注解“呢?

陈欣 SpringBoot 发布时间:2023-12-05 21:39:31 阅读数:7257 1
下文笔者讲述java中自定义验证注解的方法分享,如下所示

自定义注解产生的缘由

日常开发中,我们经常需要处理一些特殊的输入信息
     如:***格式的手机号码
   那么此时如何原生的Spring或市面上的框架不支持此种验证时,
   此时我们就必须自己编写验证注解
     编写自定义注解后,可在后续需要验证时,直接使用注解,达到代码的复用
     那么如何自定义一个验证注解呢?
   下文笔者将一一道来,如下所示

定义注解

 @Documented
 @Retention(Runtime)
 @Constraint(validatedBy = {PhoneValidator.class})
 @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
 public @interface Phone {
 ​
   String message() default "手机号格式错误";
 ​
   Class<?>[] groups() default {};
 ​
   Class<? extends Payload>[] payload() default {};
 }

相关说明

@Constraint(validatedBy = {PhoneValidator.class})
    用于指定验证器类
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
       指定@Phone注解可以作用在方法、字段、构造函数、参数以及类型上

定义验证器类

 public class PhoneValidator implements ConstraintValidator<Phone, String> {
   private static final Logger LOGGER = LoggerFactory.getLogger(PhoneValidator.class);
   private static final String REGEX = "^((13[0-9])|(15[^4])|(18[0-9])|(17[0-9])|(147))\d{8}$";
 ​
   @Override
   public boolean isValid(String s, ConstraintValidatorContext context) {
     boolean result = false;
     try {
       result = Pattern.matches(REGEX, s);
     } catch (Exception e) {
       LOGGER.error("验证手机号格式时发生异常,异常信息:", e);
     }
     return result;
   }
 }

注解的使用示例

 @Data
 public class User {
 ​
   // 省略其它代码
 ​
 - //  @Pattern(regexp = "^((13[0-9])|(15[^4])|(18[0-9])|(17[0-9])|(147))\d{8}$", message = "手机号格式不正确")
 + @Phone
   private String phone;
 ​
 }
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202312/7389.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者