我正在使用ValidationRulesServlet
爲我的API生成valdr JSON。目前產生的JSON看起來是這樣的:來自生成的JSON中ValidationMessages.properties的消息
{
"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}"
}
}
}
}
我用的球衣我REST服務,我想在上面JSON的messages
要與值從ValidationMessages.properties
取代。我的ValidationMessages.properties
位於classpath(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
如何從ValidationMessages.properties
得到valdr JSON來輸出消息,而不是例如{javax.validation.constraints.Size.message}
?
我很害怕這種情況。我明白你的觀點,但仍然認爲,如果Valdr每次定義都使用消息而不是密鑰,那麼它就會有意義。使用Jersey,你甚至可以使用'Constraint'的'message'屬性作爲實際的消息,例如'@Size(min = 2,message =「至少2個字符」)'。如果Valdr以同樣的方式使用這個屬性,我會很喜歡。 –
它的確如此。如果在Java類中定義了「Constraint#message」,則消息將以valdr JSON而不是(默認)消息密鑰結束。沒有魔術,沒有什麼特定於Jersey或valdr,它只是Java Bean驗證的工作原理。我們對此有一個單元測試,在https://github.com/netceteragroup/valdr-bean-validation/blob/master/valdr-bean-validation/src/test/java/com/github/valdr/ConstraintParserTest.java #L86如果你想看代碼。 –