2015-06-12 2 views
1

Я пытаюсь использовать валидатор впервые с Spring MVC, и я всегда получаю исключение:Spring MVC javax.validation.UnexpectedTypeException: Нет валидатор не может быть найден для типа: java.lang.String

javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.String 
    at org.hibernate.validator.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:236) 
    at org.hibernate.validator.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:219) 
    at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:167) 
    at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:113) 
    at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:121) 
    at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:334) 

Вот мой annoted класс для проверки:

public class AbstractEmployeDto implements Employable, Comparable<AbstractEmployeDto> { 

private Set<AbstractClientDto> listeClients = new TreeSet<AbstractClientDto>(); 

private Long id; 

@NotEmpty 
private String nom; 

@NotEmpty 
private String prenom; 

@DateTimeFormat(pattern="dd/MM/yyyy") 
@Past 
private String dateNaissance; 

@Size(min=10) 
private String telephone; 

@Email 
private String email; 

private TypeEmploye typePersonne; 

private String rue; 

@Size(min=4, max=4) 
private String npa; 

getter and setter ... 

И контроллер с аннотацией @valid:

@RequestMapping(value = "/saveNew", method = RequestMethod.POST) 
    public ModelAndView saveNewEmploye(@ModelAttribute("command") @Valid AbstractEmployeDto employe, 
     BindingResult result) { 
     Map<String, Object> model = new HashMap<String, Object>(); 
     if(result.hasErrors()){ 
      return new ModelAndView("/employes/add.html", model); 
     } 
... 

ответ

1

@Past и @DateTimeFormat должны использоваться на Date или Calendar не String. Как сказано в док-станции, документ:

Аннотированный элемент должен быть датой в прошлом. Теперь определено как текущее время в соответствии с виртуальной машиной. В календаре используется , если тип сравнения имеет тип Календарь - это календарь на основе текущего часового пояса и текущей локали.

Поддерживаемые типы:
java.util.Date
java.util.Calendar
нуль элементы считаются действительными.

Porbably вам нужно использовать somehting как это:

@DateTimeFormat(pattern="dd/MM/yyyy") 
@Past 
private Date dateNaissance 
Смежные вопросы