Сообщения из ValidationMessages.properties в сгенерированном JSON
Я использую ValidationRulesServlet
сгенерировать valdr JSON для моих API. В настоящее время сгенерированный 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}"
}
}
}
}
Я использую Джерси для моих услуг REST, и я хочу messages
в приведенном выше JSON следует заменить значениями из ValidationMessages.properties
,
мой ValidationMessages.properties
находится в classpath (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}
?
1 ответ
Вы не можете, по крайней мере, не из коробки. Причина довольно очевидна, если вы проверите спецификацию Bean Validation или посмотрите на Constraint
Javadoc:
Каждая аннотация ограничения должна содержать следующие атрибуты:
- Строковое сообщение () по умолчанию [...]; который должен по умолчанию использовать ключ сообщения об ошибке из полного имени класса ограничения, за которым следует
.message
, Например{com.acme.constraints.NotSafe.message}
Итак, по существу "message" : "{javax.validation.constraints.Size.message}"
в ограничении valdr JSON обозначает ключ сообщения, а не фактическую проверку message
, ИМО было бы разумнее вызывать свойство JSON messageKey
чтобы сделать это очень ясным, но мы хотели придерживаться жаргона Bean Validation. Фактически все свойства в JSON извлекаются 1 на 1 из проверки бинов. Constraint
,
Таким образом, вам нужен способ отображения "Должно быть от 2 до 2147483647 символов" в вашем внешнем интерфейсе AngularJS, если Person.firstName.size
ограничение нарушено. valdr добивается этого, хорошо интегрируясь с angular-translate. Все, что вам нужно сделать, это сделать ValidationMessages.properties
доступны для внешнего интерфейса и для инициализации углового перевода с сообщениями из этого файла.