Как правильно настроить пользовательский сопоставитель для WebApplicationException?

Я создал класс, реализующий implements ExceptionMapper<WebApplicationException>, и зарегистрировал его environment.addProvider(new WebApplicationExceptionMapper());. Мой пользовательский картограф работает, но только для некоторых исключений, расширенных с WebApplicationException. Например, это не работает для ConflictException, а также не работает для моих пользовательских исключений со следующим конструктором:

public ConflictException(URI location, Object entity) {
    super(Response.status(Response.Status.CONFLICT).location(location).entity(entity).build());
}

Это сработает, если я удалю super(Response.status..... Это очень странно, и я не могу этого объяснить. Я не уверен, это поведение Jersey или Dropwizard.

Как правильно настроить картограф для всех WebApplicationException и подклассов? Можете ли вы объяснить проблемы, которые у меня есть?


person fedor.belov    schedule 31.01.2014    source источник
comment
Подсказка: у dropwizard есть сопоставитель исключений по умолчанию. И нет определенного порядка, в котором регистрируются мапперы. Так что когда-то ваш маппер будет работать, а когда-то нет. Идея состоит в том, чтобы удалить сопоставитель исключений dropwizards. Эта статья может вам помочь.   -  person Manu Viswam    schedule 05.02.2014
comment
Да уже делал, но не помогает   -  person fedor.belov    schedule 06.02.2014
comment
это может помочь: github.com/dropwizard/dropwizard/issues/710   -  person Navrattan Yadav    schedule 14.03.2016


Ответы (2)


Может быть, слишком поздно, но нашел, что это работает.

для dropwizard 0.8 и выше


в конфигурации yaml

server:
    registerDefaultExceptionMappers: false

Это отключит сопоставитель исключений DW по умолчанию, а затем добавит ваши собственные сопоставители исключений

// Register the custom ExceptionMapper(s)
    environment.jersey().register(new RestErrorsHandler());

Источник: ошибка github

person austin    schedule 20.01.2016
comment
какое исправление для dropwizard ‹ 0.8? - person Lenin Raj Rajasekaran; 13.05.2016
comment
не работает, пока я пытаюсь использовать его в 1.0.0-rc3 - person dtc; 30.08.2016

В этом посте показано, как создавать собственные ExceptionMappers:

http://gary-rowe.com/agilestack/2012/10/23/how-to-implement-a-runtimeexceptionmapper-for-dropwizard/

Возможно, этот пост также может помочь, если у вас возникли проблемы с вашими пользовательскими картами исключения: http://thoughtspark.org/2013/02/25/dropwizard-and-jersey-exceptionmappers/

person user3280180    schedule 09.10.2014