我尝试在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
必须在Date
或Calendar
上使用
不是String
。正如bean验证文档所述:
带注释的元素必须是过去的日期。现在定义为
根据虚拟机的当前时间。使用的日历
如果比较的类型是Calendar,则日历基于
当前时区和当前语言环境。
支持的类型为:java.util.Date java.util.Calendar null
元素被视为有效。
可能您需要使用如下方式:
@DateTimeFormat(pattern="dd/MM/yyyy")
@Past
private Date dateNaissance