2012-05-26 15 views
7

İlkbahar ve İlkbahar MVC 3.1, Hazırda Bekletme 3, Hazırda Bekleme Aracı 4.3'ü kullanıyorum.Hazırda Bekletme Validator istisnası "Tür için bir doğrulayıcı bulunamadı: java.lang.String."

Özel kısıtlama denetleyicimi eklemek istiyorum, ancak onaylamamın çağrılmadığı ve her zaman "Tür için bir doğrulayıcı bulunamadı" özel durumu olduğu görülüyor. Hata yaptım mı? Hep

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) 

bu istisnayı almanın büyük bir problem var Ama benim özel kısıtlama doğrulayıcı kaldırırsanız, her şey iyi çalışır. İşte kodum, bu istisna neden kaynak bulmak yardımcı olabilir misiniz?

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

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; 

    ... 
} 

ekstra not, ben eklemiş

doğrulayıcı tip ActorConstraintValidator Actor ile parametrelenmişse ederken, tip String taşımaktadır alanına name için @ActorConstraint koymak XML

cevap

10

bahara . Yani, @ActorConstraint kısıtlaması için bir doğrulayıcı yoktur ve String yazın.

+0

Teşekkürler Gunnar, ActorConstraintValidator parametresini String olarak değiştirdim, problemi çözdüm. – Matt

İlgili konular