2017-02-08 11 views
0

Мы используем java EE 7 с Wildfly 10.0. В последние несколько дней я изучаю много функций проверки бинов, которые включены в спецификацию Java EE 7. Это звучит многообещающе, так как я вижу много преимуществ в использовании аннотаций для валидаций, включая код повторного использования и более чистый.Redefine ConstraintViolation от валидатора спящего режима

Однако javax.validation.Validator возвращает набор ограничений.

Теперь у ConstraintViolation есть прикрепленное к нему сообщение, которое вы можете получить от него getMesssage(). Тип сообщения - это строка.

Однако для обработки ошибок мы используем настраиваемый тип, который мы создали, с именем Pair<int, String>, чтобы вернуть сообщение клиенту, включая код ошибки и сообщение.

Вот пример того, как наши пары выглядят так:

public static final Pair<Integer, String> NAME_VALIDATION_ERROR = new Pair<Integer, String>(
      201,  "Name must contain only letters"); 

Теперь, это все в одном классе называется ErrorStrings и проста в использовании, потому что класс содержит статические методы, и когда вы начинаете набирать ErrorStrings. в autocomplete дает вам имена пар ошибок, которые вы можете использовать. Например, NAME_VALIDATION_ERROR.

Итак, что было бы самым простым способом добавить Pair<int, String> в ConstraintViolation, чтобы он мог использоваться для возврата ответа клиенту без сложностей с кодом.

Я thougth добавления Hashmap<String, Pair<int, String>> к ErrorStrings классу, и используя message, определенную в ConstraintViolation как ключ, но это было бы добавить много сложности к этому классу, как вы бы изменить пару и HashMap, когда вы хотели бы для изменения или добавления некоторой ошибки.

Я использую валидатор hibernate, который является реализацией по умолчанию для Jave EE, но я готов использовать любую другую реализацию. Я хотел бы знать самый простой способ, чтобы переопределить ConstraintViolation, так что в нем есть Pair<int, String>.

ответ

0

«Самый простой» способ, который я знаю, заключается в том, что вы должны создать свой собственный custom contraints, который будет генерировать пользовательские версии ConstraintViolation, которые также могут иметь метод public Pair<Integer, String> getMessagePair(). Но это было бы еще сложнее, поскольку это потребовало бы, чтобы вы переопределили все ваши валидации.

Лично я бы сделал перевод от String до Pair<Integer, String> в новом классе ErrorStringTranslator. Это немного более чистое решение, чем тот, который вы упомянули, но не избавляет вас от сложности задачи.

 Смежные вопросы

  • Нет связанных вопросов^_^