spring mvc javax.validation.UnexpectedTypeException:找不到类型的验证器:java.lang.String

时间:2015-06-12 05:27:13

标签: java spring validation spring-mvc hibernate-validator

我尝试使用Spring MVC第一次使用验证器,我总是得到例外:

<nav>
    <ul>
        <li><a href="#">Menu 1</a></li>
        <li><a href="#">Menu 2</a></li>
        <li><a href="#" class="logo">Logo</a></li>
        <li><a href="#">Menu 3</a></li>
        <li><a href="#">Menu 4</a></li>
    </ul>
</nav>

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

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)

带有注释@valid:

的控制器
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 ...

1 个答案:

答案 0 :(得分:1)

必须在@Past@DateTimeFormat上使用

DateCalendar 不是String。正如bean验证文档所说:

  

带注释的元素必须是过去的日期。现在被定义为   根据虚拟机的当前时间。使用的日历   如果比较类型是类型日历是基于日历的日历   当前时区和当前区域设置。

     

支持的类型有:
java.util.Date
java.util.Calendar
null   元素被认为是有效的。

你可能需要使用像这样的东西:

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