如何使用 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;首先使用 BindingResult
和 FieldError
类 进行 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 验证。
我使用 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;首先使用 BindingResult
和 FieldError
类 进行 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 验证。