2011-08-17 158 views
5

我有一个简单的类像这样,如何添加自定义错误消息在Hibernate验证

import javax.validation.constraints.NotNull; 
import org.hibernate.validator.constraints.Length; 

public class Form implements Serializable { 
    @NotNull 
    @Length(min = 2, max = 20) 
    private String lastName; 
} 

我在classpath messages.properties文件。它然后通过的Spring bean加载如下,

<bean name="validator" 
     class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
    <property name="validationMessageSource"> 
     <ref bean="resourceBundleLocator"/> 
    </property> 
</bean> 

<bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>classpath*:messages.properties</value> 
     </list> 
    </property> 
</bean> 

所有我想要的是让根据验证豆自定义错误消息。换句话说,我希望每个ConstraintViolation对象都返回我在属性文件中定义的错误消息,而不是默认的。是否可以使用像这种格式{xxx.yyyy.zzzz}的值添加消息属性并从messages.properties文件中引用该消息?

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 
    Set<ConstraintViolation<Form>> inputErrors = validator.validate(form); 

如果我想自定义@NotNull和@Length的默认消息,我该怎么做?

我Hibernate的验证的经验是,任何样品代码或逐步指南将不胜感激。

回答

4

你有这个资源包文件来保存该消息的值。

我想你必须使用@NotNull注释 的路径来手动覆盖消息! 像javax.validation.constraints.NotNull=Notnull error happened! 或类似的东西!

在这里寻找的是:

Hibernate Validator - The error message

希望帮助

+0

呀弗里茨,这是真的,但我不希望因为我有很多@NotNull覆盖默认messageTemplate路径(和当然还有其他注释)在我的Form类中。我想为每个属性添加特定的错误消息。有没有实现自定义MessageInterpolator的简单方法**。我发现了几个自定义消息插值器实现,但我不明白其中的任何一个。如果你能给我一个完整的源代码最简单的解决方案!! – nash

+0

并且还我试图每个验证注释的重要的信息的属性,像这样{vvvv.ssss.rrrt.message}的格式,但是当我称为ConstraintViolation的的getMessage它的印刷,因为它是,不是它的消息。 – nash

+0

我明白了!我想到的唯一方法是创建一个自定义的验证器,它包含一条消息!像@MyNotNull +消息?! 或者你可以做这样的事情 ' ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); 汽车车=新车(null); 集> constraintViolations = validator.validate(汽车); assertEquals(1,constraintViolations.size()); assertEquals(“may not be null”,constraintViolations.iterator()。next()。getMessage()); ' 并拦截对象中的消息!? – stereoscope

相关问题