我尝试在Spring MVC中首次使用验证器,但总是会遇到异常:

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)


这是我注释的类,用于验证:

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);
        }
...

最佳答案

@Past@DateTimeFormat必须在DateCalendar上使用
不是String。正如bean验证文档所述:


  带注释的元素必须是过去的日期。现在定义为
  根据虚拟机的当前时间。使用的日历
  如果比较的类型是Calendar,则日历基于
  当前时区和当前语言环境。
  
  支持的类型为:java.util.Date java.util.Calendar null
  元素被视为有效。


可能您需要使用如下方式:

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

10-07 18:56
查看更多