Сопоставление конкретного валидатора ограничения с конкретным ContraintViolationException в Джерси

Я пытаюсь создать собственный валидатор и сопоставить его с определенным ограничениемViolationException. Причина в том, что я хочу создать другое пользовательское исключение для другого ограничения. Например, если пользователь не найден в базе данных, срабатывает исключение not found abuseException, а если пользователь имеет недопустимое имя пользователя, вместо этого будет выполнено исключение bad response failureException.

@Retention(RUNTIME)
@Target({ FIELD, METHOD })
@Constraint(validatedBy = UserNotValidValidator.class)
public @interface UserIsValid { ... }

отображается в

public class ConstraintExceptionMapper implements
    ExceptionMapper<ConstraintViolationException> {
   public Response toResponse(ConstraintViolationException e) { ... }
}

Чтобы быть более конкретным, вопрос заключается в том, поддерживает ли валидатор hibernate bean-компонента множественный преобразователь исключений ограничений.


person Lunayo    schedule 28.11.2013    source источник
comment
Наткнулся на нечто подобное здесь github.com/42BV/jarb   -  person Karthik    schedule 29.11.2013


Ответы (1)


Преобразователи исключений - это концепция JAX-RS, а не проверки компонентов. Вы должны создать один сопоставитель исключений для ConstraintViolationException и заставить его создавать разные ответы на основе нарушений, содержащихся в данном исключении нарушения. Например. вы можете проверить нарушенный тип ограничения с помощью `ConstraintViolation.getConstraintDescriptor().getAnnotation().annotationType().

person Gunnar    schedule 29.11.2013
comment
но не сложно ли поддерживать код, если в `ConstraintViolationException слишком много (если есть) типов аннотаций? - person Lunayo; 29.11.2013
comment
Можете ли вы дать мне предложение/пример того, как обрабатывать исключение сопоставления ограничений. Мне понадобится цикл for для проверки annotationType(), и в некоторых случаях я захочу создать исключение badrequestexception перед notfoundException, что не является чистым решением. - person Lunayo; 30.11.2013
comment
Я смотрю и задаюсь вопросом, есть ли какие-то аннотации, которые могут сопоставить конкретное пользовательское ограничение с конкретным пользовательским картографом. - person Lunayo; 30.11.2013
comment
Вы можете определить мета-аннотацию, которую вы используете, чтобы пометить различные категории ваших пользовательских ограничений. Затем вы извлекаете тип аннотации нарушенных ограничений, как описано выше, и извлекаете категорию, читая мета-аннотацию; в зависимости от категории вы можете создать конкретный ответ. - person Gunnar; 30.11.2013