SpEL ValidatorSpEL Validator
  • 介绍
  • 快速开始
  • 使用指南
  • SpEL 表达式
  • 自定义约束注解
  • 国际化消息
  • 工作原理
  • 常见问题
  • 更新日志
GitHub
  • 介绍
  • 快速开始
  • 使用指南
  • SpEL 表达式
  • 自定义约束注解
  • 国际化消息
  • 工作原理
  • 常见问题
  • 更新日志
GitHub
  • 指南

    • 介绍
    • 快速开始
    • 使用指南
    • SpEL 表达式
    • 自定义约束注解
    • 国际化消息
    • 工作原理
    • 常见问题

国际化消息

自 v0.5.0-beta 版本起,SpEL Validator 提供了对校验消息的国际化支持。 通过配置资源文件和设置区域信息,您可以根据用户的语言环境返回相应的校验提示。

默认情况下,SpEL Validator 使用 cn.sticki.spel.validator.ValidationMessages 作为基础资源包。

以下内容将指导您如何配置您自己的国际化消息。

配置国际化资源文件

您需要在 resources 目录下创建对应的国际化资源文件(不限制资源包名称),例如:

  • ValidationMessages.properties(默认语言)
  • ValidationMessages_zh_CN.properties(简体中文)
  • ValidationMessages_en_US.properties(美式英语)

每个文件中定义的键值对格式如下:

you.message.key.SpelNotNull=must not be null

添加自定义资源包

将您的资源包添加到 SpEL Validator 的资源包列表中:

ResourceBundleMessageResolver.addBasenames("ValidationMessages");

它会将 ValidationMessages 添加到原有资源包列表的最前面,这意味着如果存在相同的key,会覆盖掉原有的。

设置区域信息

SpEL Validator 通过 Spring 提供的 LocaleContextHolder 来获取当前的区域设置。 默认情况下,它会根据当前 request headers 的 Accept-Language 字段来确定区域。

您也可以通过 LocaleContextHolder.setLocale 方法来手动更新区域。

使用国际化消息键

在使用 SpEL Validator 提供的注解时,您可以通过 message 属性指定国际化消息的键。

@SpelNotNull(assertTrue = "true", message = "{you.message.key.SpelNotNull}")
private Integer age;

在校验失败时,系统将根据当前的区域设置,从资源文件中获取对应的消息。

转义特殊字符

在资源文件中,如果需要使用花括号 {} 或反斜杠 \,请使用双反斜杠进行转义:

cn.sticki.spel.validator.constraint.Custom.message=值必须在 \\{1, 2, 3\\} 之中

SpEL Validator 会自动处理这些转义字符,确保消息正确显示。

示例

假设您有以下资源文件:

  • CustomValidationMessages.properties:
cn.sticki.spel.validator.constraint.AssertTrue.message=must be true
  • CustomValidationMessages_zh_CN.properties:
cn.sticki.spel.validator.constraint.AssertTrue.message=必须为 true

在程序启动后的某个时机添加资源包:

ResourceBundleMessageResolver.addBasenames("CustomValidationMessages");

在代码中使用:

@SpelAssert(assertTrue = "#this.active", message = "{cn.sticki.spel.validator.constraint.AssertTrue.message}")
private Boolean active;

根据当前的区域设置,校验失败时将返回相应语言的提示信息。

在 GitHub 上编辑此页
上次更新:
贡献者: 阿杆
Prev
自定义约束注解
Next
工作原理