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