在使用休眠验证器进行Java Bean验证时,学习如何解决Java异常
UnexpectedTypeException
。
1) Problem
尝试在任何bean属性上使用
不正确的休眠验证器注释
时,将出现
UnexpectedTypeException
错误。 错误堆栈跟踪看起来像这样。
Exception in thread "main" javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Long'. Check configuration for 'id' at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getExceptionForNullValidator(ConstraintTree.java:108) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getInitializedConstraintValidator(ConstraintTree.java:140) at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:55) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:73) at org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:127) at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:120) at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:533) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:496) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:465) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:430) at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:380) at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:169) at com.howtodoinjava.example.TestHibernateValidator.main(TestHibernateValidator.java:25)
例如,您收到上述错误,您尝试将
@NotBlank
批注放在任何非字符串类型的字段上,例如
java.lang.Long
类型。
public class User { @NotBlank //Incorrect usage private Long id; //More fields
阅读更多: Hibernate Validator
2) Solution
如问题所述,要解决此错误,您必须使用正确的注释。 在上述问题中,
@NotBlank
批注必须仅应用于任何
String
字段。
要验证
long
类型字段,请使用注释
@NotNull
。
public class User { public class User { @NotNull(message = "Please enter id") private Long id; @Size(max = 20, min = 3, message = "{user.name.invalid}") @NotEmpty(message = "Please enter name") private String name; //More fields