Мы используем 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>
.