Мой вопрос похож на валидацию Resteasy Bean Not Being Invoked. Однако решения там не работают.
Я использую Resteasy 3.0.9.Final с resteasy-validator-provider-11 в моем пом. Я запускаю все это, используя специальный класс Jetty.
Странно, валидация отлично работает на @PathParams, но не на бобах.
@POST
@Path("/foo/{myParam}")
public Message post(MyBean myBean, @PathParam("myParam") @Size(min=5) String myParam) {
return new Message("bean:" + myBean.toString());
}
public static class MyBean {
@NotNull
public String myStr;
@Max(value = 3)
public int myInt;
public String toString() {
return myStr + myInt;
}
}
В этом случае ограничение @Size на myParam работает нормально. Но ограничения @NotNull и @Max в MyBean не вызываются.
Я где-то пропускаю аннотацию?
Вот еще одна подсказка. Мои журналы включают следующие записи:
2014-12-30 12:16:56 org.hibernate.validator.internal.util.Version 6446 INFO HV000001: Hibernate Validator 5.0.1.Final
2014-12-30 12:16:56 org.jboss.resteasy.plugins.validation.AbstractValidatorContextResolver 6477 INFO Unable to find CDI supporting ValidatorFactory. Using default ValidatorFactory
Я уверен, но не на 100% уверен, что проблема в том, что вам не хватает @Valid
в параметре MyBean
. Я также рекомендовал бы сделать его отдельным классом, а не статическим классом.
В спецификациях ограничения проверки на методы, в которых объект представляет собой сложный объект, должны иметь параметр annotated @Valid
чтобы гарантировать, что ограничения каскадируются.
@Valid
из спецификации bean val.