gpt4 book ai didi

java - 使用 Hibernate Validation 自定义消息是否需要任何配置

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:25 25 4
gpt4 key购买 nike

我正在使用以下类通过 Hibernate Validation 来验证我的 bean。效果很好。基本上就是听众发现的here对于 JPA 1,转换为用于验证我的 Spring Controller 中的 bean。我正在尝试自定义返回的消息。 This以及我能找到的所有其他资源,例如将 ValidationMessages.properties 文件放入 Web-Inf 目录中。该文件也包含在下面。这是行不通的。有什么建议吗?

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;
}
}
}`

ValidationMessages.properties file

validator.min = must be greater than or equal to {value}

validator.notEmpty = This field can't be empty

最佳答案

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

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
scope="singleton" lazy-init="default">
<property name="basename" value="ValidationMessages"/>
</bean>

您只需使用 bean 来检索消息:

@Autowired
private MessageSource messageSource;

public String getMessage(String messageName) {
return messageSource.getMessage(messageName, null, null);
}

为了在上下文中访问 bean,您还必须执行以下操作:

@Component
public class BeanValidationTool{...

关于java - 使用 Hibernate Validation 自定义消息是否需要任何配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4619056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com