在spring中定义如@NotEmpty
等类型的注解.分以下几步:
创建注解
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MobileValidator.class)
public @interface Mobile {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
-
@Target
: 表示注解可以用于注解哪些元素. 本例在字段和方法上. -
@Retention
: 表示注解要保留到什么时候, 本例为运行时. -
@Constraint
: 必须的注解,定义注解约束,即通过其validateBy
属性指定定义验证规则的类(必须是ConstraintValidator
的子类) -
message
: 自定义验证信息说明.
定义验证规则类
验证规则要实现ConstraintValidator
接口.
这个接口有两个泛型参数, 第一个为对应的验证注解类型, 第二参数是校验目标的字段类型.
public class MobileValidator implements ConstraintValidator<Mobile, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
if (value.length() != 11) {
return false;
}
return true;
}
}
完成以上两步就可以像使用其他验证注解一样使用了
测试
public class Person {
@Mobile(message = "请输入11位电话号码")
private String mobile;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
@RequestMapping("/test")
public String test(@Valid Person person, BindingResult errors) {
String res = "";
if (errors.hasErrors()) {
res = errors.getFieldError().getDefaultMessage();
System.out.println(res);
}
return res;
}
网友评论