SpringBoot在BindingResult中本地化错误消息

时间:2016-10-30 18:30:01

标签: 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 class SomeDto {

    @Size(min = 3, message = "messages.field.error2")
    private String field1;
}

然后处理响应过滤器中的字段,或以某种方式解析百万美元模板中的消息。

2 个答案:

答案 0 :(得分:0)

好的,我在百里香中找到了一条路:

<div th:if="${#fields.hasErrors('field1')}"
     th:each="e : ${#fields.errors('field1')}" th:text="#{${e}}" >
</div>

然而,它可能不是最优雅的方式。

答案 1 :(得分:0)

“然而,它可能不是最优雅的方式。”

实际上,你非常接近“优雅的方式”。而不是:th:text="#{${e}}"只使用th:text="${e}"。但是,当然,这不会显示本地化的消息。要显示本地化消息,您需要在messages_en.properties(或您的语言环境)文件中添加此消息:

Size.someDto.field1=Field has to contain at least {2} characters.

因此,模式基本上是:验证注释的名称后跟模型属性实例的名称,后跟字段名称。 {2}代表min注释属性值,而{1}代表max。它将显示“开箱即用”的本地化消息。

P.S。你不需要这一行:

result.addError(new FieldError("field1","messages.field1.error1"));