gpt4 book ai didi

java - 如何在 Spring 中使用注释验证并从属性文件中获取错误消息?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:31 25 4
gpt4 key购买 nike

我是 Spring 新手。

我在我的域类中这样设置验证:

public class Worker {

@NotNull(message="Name must be input")
@Size(min=1,max=50, message="Name must not exceed 50 characters")
private String name;
...

}

这是 jsp 文件:

<form:input path="code" readonly="false" />
<font color="red"><form:errors path="code" />

Controller 代码:

@RequestMapping(value="/test",method=RequestMethod.POST)
public void form(@Valid Worker worker, BindingResult result) {

if (result.hasErrors()) {
return;
}
...

它有效,但我如何在我的消息源中用一些文本(如 worker.name.overflow)替换“名称不得超过 50 个字符”?我可能需要将 messageResolver 添加到 BindingResult 中吗?

所有搜索结果似乎都是关于编写自定义 validator 类的,但我现在想使用注释。我很确定有办法,因为在 this question有人这样做了。

最佳答案

要告诉 Hibernate validator 对代码进行查找,请将消息的值放在大括号中,例如 @NotNull(message="{worker.name.NotNull}",然后将在类路径的根目录(/WEB-INF/classes、Maven 中的资源文件夹等)中的 ValidationMessages.properties 中进行翻译。

validator 实现自己独立地查找那些,然后它们继续使用已经翻译为默认消息的 BindingResult。发生在 Spring 消息源之外。理论上,您可以覆盖 LocalValidatorFactory bean,将 validator 的消息输出作为代码放到 Errors 对象上,然后在注释中去掉大括号,以便 Hibernate validator 通过它。将 JSR-303 ConstraintViolations 转换为 Spring Errors 的源代码非常简单,易于阅读和扩展。它只是将注释的名称作为代码,将注释属性作为参数,然后将 validator 的翻译作为默认消息。你可以阅读实现 here .

您可以将 javax.validation.MessageInterpolator 添加到您的 javax.validation.Configuration 以告诉它在其他属性文件中查找消息。如果您使用的是 Spring LocalValidatorFactory bean,它上面有一个 setMessageInterpolator(),您可以使用它来注入(inject)一个。检查this Hiberate 提供程序实现的源代码。

关于java - 如何在 Spring 中使用注释验证并从属性文件中获取错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5786582/

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