2012-05-26 9 views
7

私は、SpringとSpringのMVC 3.1、Hibernate 3、Hibernate Validator 4.3を使用します。Hibernate Validator例外 "タイプ:java.lang.Stringのバリデータが見つかりませんでした"

カスタム制約バリデータを追加したいと思いますが、バリデータが呼び出されず、常に「バリデータが見つかりません」という例外があります。私は間違いを犯しましたか? 私はいつも

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.String. 
    at org.hibernate.validator.internal.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:394) 
    at org.hibernate.validator.internal.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:375) 

この例外を取得する大きな問題を抱えてしかし、私は私のカスタム制約バリデータを削除した場合、すべてが正常に動作します。 これは私のコードですが、この例外が発生する原因を見つけるのを助けてくれますか?

test.constraint.ActorConstraint 

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Constraint(validatedBy=ActorConstraintValidator.class) 
public @interface ActorConstraint { 

    String message() default "Actor already exists in database"; 
    public abstract Class<?>[] groups() default {}; 
    public abstract Class<? extends Payload>[] payload() default {}; 

} 



test.constraint.ActorConstraintValidator 
@Component 
public class ActorConstraintValidator implements ConstraintValidator<ActorConstraint, Actor> { 

    @Autowired 
    private ActorModel actorModel; 

    @Override 
    public void initialize(ActorConstraint arg0) { 
    System.out.println("ActorConstraintValidator is initialized"); 
    } 

    @Override 
    public boolean isValid(Actor actor, ConstraintValidatorContext context) { 

    boolean pass = true; 

    if (getActorModel().isActorExist(actor.getName())){ 
     pass = false; 
    } 
    return pass; 
    } 


    public ActorModel getActorModel() { 
    return actorModel; 
    } 

    public void setActorModel(ActorModel actorModel) { 
    this.actorModel = actorModel; 
    } 
} 



test.entity.Actor 

@Entity /*(findByName named query definition is omitted)*/ 
public class Actor implements Serializable { 

    public static final String NAMED_QUERY__FIND_ACTOR_BY_NAME = "findActorByName"; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ActorConstraint 
    @NotEmpty 
    private String name; 

    @DateTimeFormat(iso=ISO.DATE) 
    private Date birthday; 

    @Min(0) 
    @Max(300) 
    private Integer height; 

    ... 
} 

余分なノートで、私はバリデータタイプActorConstraintValidatorActorでパラメータ化されている間あなたは、タイプStringのある分野name@ActorConstraintを置くXML

答えて

10

を春に

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

を追加しました。つまり、@ActorConstraintの制約と型Stringのバリデータはありません。

+0

Gunnarありがとうございます。ActorConstraintValidatorパラメータをStringに変更しました。問題は解決しました。 – Matt

関連する問題