에서 @Valid 및 @Size 내가 이상한 최대 절전 모드 검사기 (JSR 303)를 사용하여 행동과 코드베이스를 다음 java.util.List 타입JSR 303 - 최대 절전 모드 검증 4.2.0 - UnexpectedTypeException - 조합
의 속성을 주석을 :
public class A {
@Valid @NotNull @Size(min=1, max=15)
private List<B<?>> validList = new ArrayList<B<?>>();
...
}
나는 다음과 같은 예외가 얻을 검증을 시작하면 다음과 같이
javax.validation.UnexpectedTypeException: No validator could be found for type: B
at org.hibernate.validator.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:383)
at org.hibernate.validator.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:364)
at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:313)
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:144)
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:117)
at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:84)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:452)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:397)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:361)
at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:313)
at org.hibernate.validator.engine.ValidatorImpl.validateCascadedConstraint(ValidatorImpl.java:613)
at org.hibernate.validator.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:478)
at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:322)
at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:139)
내 코드 (그리고 불행하게도 나의 의미)를 변경하는 경우를 :
public class A {
@Valid @NotNull @Size(min=0, max=15)
private List<B<?>> validList = new ArrayList<B<?>>();
...
}
모든 것은 예외없이 예외없이 유효합니다.
내가 누락 된 부분은 무엇입니까? 왜 이것이 작동하지 않는지 아무도 생각하지 못했습니까?
문제점이 무엇인지 알아 냈습니다. 내가 클래스 B에 대한 사용자 정의 제약 조건이
@CustomConstraint
public class B {
}
제약 :
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = CustomConstraintValidator.class)
@Documented
public @interface CustomConstraint {
String message() default "{com.mycompany.constraints.checkcase}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
및 검증 :
public class CheckCaseValidator implements ConstraintValidator<CustomConstraint, B<? extends C>> {
... //validation stuff here
}
내가 검사기 클래스의 제네릭 식을 제거한 후 :
public class CheckCaseValidator implements ConstraintValidator<CustomConstraint, B> {
... //validation stuff here
}
모든 것이 잘 작동했습니다.
다른 사람들이 도움이되기를 바랍니다. 안부, 월터
'@ Size'와 관련이 있습니까? 나에게도'@ Valid' 만 존재하는 경우에도 같은 예외가 발생합니다. – jeha