如何使用 i18n 在我的控制器中 return 自定义休眠验证消息?

How can I return custom hibernate validation message in my controller with i18n?

我使用 Spring Boot 和 Hibernate 验证器以及 Thymeleaf。

验证表单项时一切正常。

但是我添加验证码后,我检查它是否是错误的代码;

当代码错误时我添加一个新的FieldError和return它。

if (!captchaCode.equalsIgnoreCase(user.getVrifyCode())) {
    bindingResult.addError(new FieldError("user", "vrifyCode", "{singup.vrifycode.error}"));
}

当然,我在 ValidationMessages.properties 文件中定义了 singup.vrifycode.error

但是在网页上它只显示 singup.vrifycode.error 不是正确的值。

但在我的模型中一切正常,如下所示:

@NotBlank(message="{signup.email.null}")
@Email(message="{signup.email.fomart}")
private String email;

如何在我的页面中显示正确的值?

如果我不能,请告诉我如何在 ValidationMessages_en_US.properties、ValidationMessages_ja_JP.properties 等中获得正确的值(按语言环境)。

谢谢!

首先我们必须了解这里有两种不同的验证API:s;首先使用 BindingResultFieldError 类 进行 Spring 验证,然后使用注释进行 Bean 验证 API (Hibernate Validator)。好消息是 Spring 翻译了 Bean Validation API 中的验证错误,所以它们可以一起工作。

一个区别是 Spring 不在其翻译键周围使用 {}(在 spring 中称为 codes), 请记住这一点。

对于 i18n,您必须使用 FieldError 的 7 参数构造函数:

new FieldError("user", "vrifyCode", user.getVrifyCode(), false, new String[] {"singup.vrifycode.error"}, null, null)

请注意,翻译应该在 Spring 消息文件中,因为我们在这里使用的是 Spring 验证。