Специфичный для URI ExceptionMapper в JAX-RS - PullRequest
5 голосов
/ 28 сентября 2011

Я использую Джерси и Гис в качестве своего IOC-контейнера. Я хотел бы знать, возможно ли связать ExceptionMapper с определенным URI. Причина этого заключается в том, что я хочу отобразить одно и то же исключение по-разному в зависимости от того, какой URI был посещен. Например, предположим, что у меня есть следующие два сопоставителя исключений для моего настраиваемого исключения:

public class MyExceptionMapperForFirstURI implements
  ExceptionMapper<MyException> {..return response based on first URI..}

public class MyExceptionMapperForSecondURI implements
  ExceptionMapper<MyException> {..return response based on second URI..}

Насколько я понимаю, вы связываете ExceptionMapper в вашем ServletModule следующим образом:

public class MyModule extends ServletModule {

    @Override
    public void configureServlets() {
        super.configureServlets();
        bind(MyCustomExceptionMapper.class);
    }
}

Как мне связать MyExceptionMapperForFirstURI и MyExceptionMapperForSecondURI, чтобы они связывались с правильными URI. Возможно ли это и, если возможно, правильно ли это сделать?

Ответы [ 2 ]

4 голосов
/ 07 июня 2013

Это довольно поздний ответ ;-), но вы всегда можете добавить UriInfo и ответвление.Итак,

@Context
UriInfo uriInfo;

.....

if (matchesA(uriInfo.getAbsolutePath())) {
    // do something
}
3 голосов
/ 28 сентября 2011

Не уверен, как выглядят URI вашего приложения, но если возможно разделить ваше приложение на два сервлета или фильтра, то вы можете сделать это так - то есть один сервлет / фильтр обслуживает один набор ресурсов и включает первый преобразователь и другой сервлет / фильтр обслуживают другой набор ресурсов и включают другой преобразователь.

Если это пользовательские исключения, вы также можете передать Request в качестве аргумента исключения и иметь только один маппер - определитесь с ответом на основе uri запроса в маппере.

...