目的:通过自定义校验型注释 实现@MyConstraint注解(根据数据库查询校验或其他自定义校验)
一、bean代码
public class User {
private String id;
@MyConstraint(message = "这是一个测试")
@ApiModelProperty(value = "用户名")
private String username;
@NotBlank(message = "密码不能为空")
private String password;
@Past(message = "生日必须是过去的时间")
private Date birthday;
二、自定义注解
@Target({ElementType.METHOD, ElementType.FIELD}) //注解的目标范围 方法,字段上
@Retention(RetentionPolicy.RUNTIME) //运行时
@Constraint(validatedBy = MyConstraintValidator.class) //校验时执行的自定义类
public @interface MyConstraint {
String message();
Class<?>[] groups() default { }; //必须实现这三个方法
Class<? extends Payload>[] payload() default { };
}
三、校验时执行时的自定义类
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {
//MyConstraint为自定义注解类 object为输入的参数类型
@Autowiredprivate HelloService helloService;@Overridepublic void initialize(MyConstraint constraintAnnotation) {System.out.println("my validator init"); //初始化方法}@Overridepublic boolean isValid(Object value, ConstraintValidatorContext context) {helloService.greeting("tom"); System.out.println(value); //value为校验时传入的值return true;}}四、调用的service及其实现类
@Service
public class HelloServiceImpl implements HelloService {
/* (non-Javadoc)
* @see com.imooc.service.HelloService#greeting(java.lang.String)
*/
@Override
public String greeting(String name) {
System.out.println("greeting");
return "hello "+name;
}
}
public interface HelloService {
String greeting(String name);
}