Java SpringBoot在BindingResult中本地化错误消息
我试图找出如何在spring boot中本地化错误消息。理想的方法是在如下错误中设置本地化消息名称:Java SpringBoot在BindingResult中本地化错误消息,java,spring,spring-boot,localization,thymeleaf,Java,Spring,Spring Boot,Localization,Thymeleaf,我试图找出如何在spring boot中本地化错误消息。理想的方法是在如下错误中设置本地化消息名称: @RequestMapping public ModelAndView index(@Valid SomeDto dto, BindingResult result) { //... result.addError(new FieldError("field1","messages.field1.error1")); //... } //... public clas
@RequestMapping
public ModelAndView index(@Valid SomeDto dto, BindingResult result) {
//...
result.addError(new FieldError("field1","messages.field1.error1"));
//...
}
//...
public class SomeDto {
@Size(min = 3, message = "messages.field.error2")
private String field1;
}
然后处理响应过滤器中的字段,或者以某种方式解析thymeleaf模板中的消息。好的,我在thymeleaf中找到了一种方法:
<div th:if="${#fields.hasErrors('field1')}"
th:each="e : ${#fields.errors('field1')}" th:text="#{${e}}" >
</div>
不过,这可能不是最优雅的方式。好的,我在thymeleaf中找到了一种方法:
<div th:if="${#fields.hasErrors('field1')}"
th:each="e : ${#fields.errors('field1')}" th:text="#{${e}}" >
</div>
然而,这可能不是最优雅的方式。“然而,这可能不是最优雅的方式。” 事实上,你很接近“优雅的方式”。不要使用:
th:text=“#{${e}}”
只需使用th:text=“${e}”
。但当然,这不会显示本地化消息。要显示本地化消息,您需要将其添加到消息\u en.properties
(或任何您的区域设置)文件中:
因此,该模式基本上是:验证注释的名称后跟模型属性实例的名称,该名称后跟字段的名称{2}
表示min
注释属性值,{1}
表示max
。它将显示本地化消息“开箱即用”
另外,你不需要这条线:
result.addError(new FieldError("field1","messages.field1.error1"));
“然而,这可能不是最优雅的方式。”
事实上,你很接近“优雅的方式”。不要使用:th:text=“#{${e}}”
只需使用th:text=“${e}”
。但当然,这不会显示本地化消息。要显示本地化消息,您需要将其添加到消息\u en.properties
(或任何您的区域设置)文件中:
因此,该模式基本上是:验证注释的名称后跟模型属性实例的名称,该名称后跟字段的名称{2}
表示min
注释属性值,{1}
表示max
。它将显示本地化消息“开箱即用”
另外,你不需要这条线:
result.addError(new FieldError("field1","messages.field1.error1"));
@亚历克斯:我觉得这篇文章没有什么帮助。请注意,本地化设置不是问题。你是对的,我误解了你的问题!这应该已经是现成的了。
FieldError
是一个DefaultMessageSourceResolvable
,它将被传递给已配置的MessageSource
。您需要做的唯一一件事是确保错误代码messages.field1.error1
在您的messages.[locale].properties中可用。如果你的设置不符合要求,那么你的设置就是有缺陷的。@Alex我在这篇文章中看不到任何有用的东西。请注意,本地化设置不是问题。你是对的,我误解了你的问题!这应该已经是现成的了。FieldError
是一个DefaultMessageSourceResolvable
,它将被传递给已配置的MessageSource
。您需要做的唯一一件事是确保错误代码messages.field1.error1
在您的messages.[locale].properties中可用。如果这不符合开箱即用的原则,那么您的设置就是有缺陷的。我添加了result.addError(newfielderror(“field1”,“messages.field1.error1”)代码>显示我还需要手动处理一些错误,并以相同的方式显示区域设置消息。如何使用此模式显示控制器验证中的错误?我添加了result.addError(新的FieldError(“field1”,“messages.field1.error1”)代码>显示我还需要手动处理一些错误,并以相同的方式显示区域设置消息。如何使用此模式显示控制器验证中的错误?