Ich benutze Spring und Spring MVC 3.1, Hibernate 3, Hibernate Validator 4.3.Hibernate Validator-Ausnahme "Es konnte kein Typ für den Typ" java.lang.String "gefunden werden."
Ich möchte meinen benutzerdefinierten Constraint-Validator hinzufügen, aber es scheint, dass mein Validator nicht aufgerufen wurde und immer "No validator konnte für type" Ausnahme gefunden werden. Habe ich einen Fehler gemacht? Ich habe ein großes Problem, diese Ausnahme immer zu bekommen
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)
Aber wenn ich meine benutzerdefinierte Einschränkung Validator entfernen, funktioniert alles einwandfrei. Hier ist mein Code, könnten Sie helfen, die Quelle zu finden, die diese Ausnahme verursacht?
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;
...
}
zusätzliche Anmerkung, habe ich hinzugefügt
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
xml zum Frühling
Dank Gunnar, habe ich ActorConstraintValidator Parameter auf String, Problem gelöst. – Matt