Java 是否有使用Hibernate验证自定义消息所需的任何配置

Java 是否有使用Hibernate验证自定义消息所需的任何配置,java,spring,spring-mvc,hibernate-validator,Java,Spring,Spring Mvc,Hibernate Validator,我使用下面的类通过Hibernate验证来验证我的bean。它工作得很好。它基本上是JPA1的监听器,转换为用于验证Spring控制器中的bean。我正在尝试自定义返回的消息。还有我能找到的其他资源,比如说在Web Inf目录中放一个ValidationMessages.properties文件。该文件也包含在下面。这是行不通的。有什么建议吗 public class BeanValidationTool { public void validate(Object entity) {

我使用下面的类通过Hibernate验证来验证我的bean。它工作得很好。它基本上是JPA1的监听器,转换为用于验证Spring控制器中的bean。我正在尝试自定义返回的消息。还有我能找到的其他资源,比如说在Web Inf目录中放一个ValidationMessages.properties文件。该文件也包含在下面。这是行不通的。有什么建议吗

public class BeanValidationTool {

    public void validate(Object entity) {
        TraversableResolver tr = new MyTraversableResolver();
        Validator validator = Validation.buildDefaultValidatorFactory().usingContext().traversableResolver(tr).getValidator();
        final Set<ConstraintViolation<Object>> constraintViolations = validator.validate(entity);
        if (constraintViolations.size() > 0) {
          Set<ConstraintViolation<?>> propagatedViolations = new HashSet<ConstraintViolation<?>>(constraintViolations.size());
          Set<String> classNames = new HashSet<String>();
            for (ConstraintViolation<?> violation : constraintViolations) {
              propagatedViolations.add(violation);
              classNames.add(violation.getLeafBean().getClass().getName());
            }
            StringBuilder builder = new StringBuilder();
            builder.append("validation failed for classes ");
            builder.append(classNames);
            throw new ConstraintViolationException(builder.toString(), propagatedViolations);
        }
    }

    public class MyTraversableResolver  implements TraversableResolver {

        public boolean isReachable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
            return traversableObject == null || Hibernate.isInitialized(traversableObject);
        }

        public boolean isCascadable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
            return true;
        }
    }
  }`

您必须在应用程序上下文中定义messageSource:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
      scope="singleton" lazy-init="default">
    <property name="basename" value="ValidationMessages"/>
</bean>
为了在上下文中访问bean,您还必须执行以下操作:

@Component
public class BeanValidationTool{...

您必须在应用程序上下文中定义messageSource:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
      scope="singleton" lazy-init="default">
    <property name="basename" value="ValidationMessages"/>
</bean>
为了在上下文中访问bean,您还必须执行以下操作:

@Component
public class BeanValidationTool{...

这是关于如何在Spring中设置自定义消息的一个很好的描述,但是,也许我的理解是有限的,我认为为了定制Hibernate验证器消息,我不应该使用bean。相反,这些值应该被自动替换,并在调用validate方法时返回。这是关于如何在Spring中设置自定义消息的一个很好的描述,但是,也许我的理解是有限的,我认为为了定制Hibernate验证器消息,我不应该使用bean。相反,这些值应该被自动替换,并在调用validate方法时返回。