来自 ValidationMessages.properties 的消息已生成 JSON
Messages from ValidationMessages.properties in generated JSON
我正在使用 ValidationRulesServlet
为我的 API 生成 valdr JSON。当前生成的 JSON 如下所示:
{
"Person" : {
"firstName" : {
"size" : {
"min" : 2,
"message" : "{javax.validation.constraints.Size.message}",
"max" : 2147483647
},
"required" : {
"message" : "{javax.validation.constraints.NotNull.message}"
}
},
"lastName" : {
"size" : {
"min" : 2,
"message" : "{javax.validation.constraints.Size.message}",
"max" : 20
},
"required" : {
"message" : "{javax.validation.constraints.NotNull.message}"
}
}
}
}
我将 Jersey 用于我的 REST 服务,我希望将上面 JSON 中的 messages
替换为 ValidationMessages.properties
中的值。
我的 ValidationMessages.properties
位于类路径 (src/main/resources
) 中并被 Jackson 正确使用。这可以通过使用无效值调用 REST 端点来确认。这是一个示例响应:
[
{
"message": "Must be between 2 and 2147483647 characters",
"messageTemplate": "{javax.validation.constraints.Size.message}",
"path": "PersonServiceImpl.updatePerson.arg0.firstName",
"invalidValue": ""
}
]
我的ValidationMessages.properties
中对应的消息是
javax.validation.constraints.Size.message = Must be between {min} and {max} characters
如何让 valdr JSON 输出来自 ValidationMessages.properties
的消息而不是例如{javax.validation.constraints.Size.message}
?
你不能,至少不能开箱即用。如果您检查 Bean Validation 规范或查看 Constraint
Javadoc:
,原因就很明显了
Each constraint annotation must host the following attributes:
- String message() default [...]; which should default to an error message key made of the fully-qualified class name of the constraint
followed by
.message
. For example
{com.acme.constraints.NotSafe.message}
因此,本质上 "message" : "{javax.validation.constraints.Size.message}"
在 valdr 约束 JSON 中表示消息 key 而不是实际验证 message
。 IMO 更明智的做法是调用 JSON 属性 messageKey
来明确这一点,但我们想坚持使用 Bean Validation 行话。事实上,JSON 中的所有属性都是从 Bean Validation Constraint
.
中逐一提取的
因此,如果违反 Person.firstName.size
约束,您需要一种在 AngularJS 前端显示 "Must be between 2 and 2147483647 characters" 的方法。 valdr 通过 integrating well with angular-translate 实现了这一点。
您需要做的就是让您的 ValidationMessages.properties
可用于前端并使用该文件中的消息初始化 angular-translate。
我正在使用 ValidationRulesServlet
为我的 API 生成 valdr JSON。当前生成的 JSON 如下所示:
{
"Person" : {
"firstName" : {
"size" : {
"min" : 2,
"message" : "{javax.validation.constraints.Size.message}",
"max" : 2147483647
},
"required" : {
"message" : "{javax.validation.constraints.NotNull.message}"
}
},
"lastName" : {
"size" : {
"min" : 2,
"message" : "{javax.validation.constraints.Size.message}",
"max" : 20
},
"required" : {
"message" : "{javax.validation.constraints.NotNull.message}"
}
}
}
}
我将 Jersey 用于我的 REST 服务,我希望将上面 JSON 中的 messages
替换为 ValidationMessages.properties
中的值。
我的 ValidationMessages.properties
位于类路径 (src/main/resources
) 中并被 Jackson 正确使用。这可以通过使用无效值调用 REST 端点来确认。这是一个示例响应:
[
{
"message": "Must be between 2 and 2147483647 characters",
"messageTemplate": "{javax.validation.constraints.Size.message}",
"path": "PersonServiceImpl.updatePerson.arg0.firstName",
"invalidValue": ""
}
]
我的ValidationMessages.properties
中对应的消息是
javax.validation.constraints.Size.message = Must be between {min} and {max} characters
如何让 valdr JSON 输出来自 ValidationMessages.properties
的消息而不是例如{javax.validation.constraints.Size.message}
?
你不能,至少不能开箱即用。如果您检查 Bean Validation 规范或查看 Constraint
Javadoc:
Each constraint annotation must host the following attributes:
- String message() default [...]; which should default to an error message key made of the fully-qualified class name of the constraint followed by
.message
. For example{com.acme.constraints.NotSafe.message}
因此,本质上 "message" : "{javax.validation.constraints.Size.message}"
在 valdr 约束 JSON 中表示消息 key 而不是实际验证 message
。 IMO 更明智的做法是调用 JSON 属性 messageKey
来明确这一点,但我们想坚持使用 Bean Validation 行话。事实上,JSON 中的所有属性都是从 Bean Validation Constraint
.
因此,如果违反 Person.firstName.size
约束,您需要一种在 AngularJS 前端显示 "Must be between 2 and 2147483647 characters" 的方法。 valdr 通过 integrating well with angular-translate 实现了这一点。
您需要做的就是让您的 ValidationMessages.properties
可用于前端并使用该文件中的消息初始化 angular-translate。