我正在使用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
)中,并由杰克逊正确使用。这可以通过调用具有无效值的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}
吗
答案 0 :(得分:1)
你不能,至少不能开箱即用。如果您检查Bean Validation规范或查看Constraint
Javadoc:
每个约束注释必须包含以下属性:
- String message()默认[...];应该默认为由约束的完全限定类名构成的错误消息密钥 然后是
.message
。例如{com.acme.constraints.NotSafe.message}
因此,在valdr约束中本质上"message" : "{javax.validation.constraints.Size.message}"
JSON表示消息 key 而不是实际验证message
。调用JSON属性messageKey
以使IMO更清楚,但我们希望坚持使用Bean Validation术语。实际上,JSON中的所有属性都是从Bean验证Constraint
中逐个提取的。
因此,如果违反Person.firstName.size
约束,则需要在AngularJS前端显示“必须介于2和2147483647个字符之间”的方法。 valdr通过integrating well with angular-translate实现了这个目标。
您需要做的就是让ValidationMessages.properties
可用于前端,并使用该文件中的消息初始化angular-translate。