Сообщения из 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 доступны для внешнего интерфейса и для инициализации углового перевода с сообщениями из этого файла.

Другие вопросы по тегам