java中如何”自定义验证注解“呢?
下文笔者讲述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; }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。