我遇到问题,因为自定义ConstraintValidatorContext
initialize()
仅在调用此自定义注入时首次调用,之后它再次运行方法isValid only()而不再使用构造initialize()
方法每次 ! 。
示例@APIAuth注释:
@Documented
@Constraint(validatedBy = APIAuthValidator.class)
@Target({ElementType.CONSTRUCTOR,ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface APIAuth {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
APIAuthValidator.class
public class APIAuthValidator implements ConstraintValidator<APIAuth, String>{
@Override
public void initialize(APIAuth constraintAnnotation) {
System.out.println("echo first time only");
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return true;
}
}
在Restful Stateless Session bean中使用的示例
@Stateless
@Path("Accepted")
public class AcceptedAPI {
@Context
private UriInfo context;
@Context
private HttpServletRequest client;
@PersistenceContext (unitName="APIPU") EntityManager EM;
@GET
@APIAuth
@Produces(MediaType.TEXT_PLAIN)
public String getIps() {
return "Test";
}
}
所以当我请求无状态时,它首次在控制台echo first time only
上回显,当我再次请求无状态时,它不会再回显任何事情!
所以我认为我的自定义Validator注入是在它第一次在java环境中调用时被初始化和缓存的,
那么我每次打电话时如何使我的自定义注入强制initialize
?
谢谢,