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;
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


