В одном из моих проектов я уже обновил Джерси с версии 2.14
до 2.23
. Но я борюсь много часов с одной проблемой. Мой проект определяет его собственный ExceptionMapper
для ValidationException
, но, к сожалению, у Джерси уже есть встроенный редактор исключений для этого исключения, и я не могу его переопределить.Как переопределить встроенный редактор исключений в Jersey 2.23?
Я зарегистрировал правильно (я проверил) мой собственный картограф, который представлен ниже:
@Provider
public class ValidationExceptionMapper implements
ExceptionMapper<ValidationException> {
@Override
public Response toResponse(ValidationException exception) {
return Response.status(Status.BAD_REQUEST).build();
}
}
, но она никогда не вызывается. Джерси всегда забирает org.glassfish.jersey.server.validation.internal.ValidationExceptionMapper
. Я также попытался использовать аннотацию @Priority
для моего настраиваемого картографа, но, к сожалению, Джерси не учитывает это.
Итак, что же происходит? Он работал отлично в предыдущей версии Джерси, поэтому, похоже, это ошибка регрессии.
Я сдаюсь. Любые подсказки?
Вы можете использовать 'ConstraintViolationException' (который является фактическим типом исключений проверки) в качестве работы. Это более специфично, чем 'ValidationException', поэтому оно будет иметь приоритет. Я никогда не выяснял, как отключить этот один картограф, не отключая поставщиков _all_ meta-inf (а не веселое решение). Моя работа заключалась в том, чтобы просто использовать mapper для 'ConstraintViolationException' –
Спасибо, я знаю это, но это не решает проблему вообще. Поскольку приложение должно отвечать на 'ValidationException'. –
'ConstraintViolationException' расширяет' ValidationException'. Тип исключения, созданный с проверкой компонента в Джерси, всегда будет «ConstraintViolationException». Он работает для 'ValidationException', потому что супермашины типа могут обрабатывать исключения подтипа, нет ли сопоставителя для подтипа –