JAX-RS中特定于URI的ExceptionMapper

时间:2011-09-28 09:55:06

标签: jersey jax-rs guice

我正在使用Jersey,而Guice是我的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..}

据我所知,你可以在ServletModule中绑定一个ExceptionMapper,如下所示:

public class MyModule extends ServletModule {

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

如何绑定MyExceptionMapperForFirstURIMyExceptionMapperForSecondURI以便它们与正确的URI相关联。这是可能的,如果可能的话:这是正确的方法吗?

2 个答案:

答案 0 :(得分:4)

这是很晚的答案;-)但你可以随时注入UriInfo和分支。所以,

@Context
UriInfo uriInfo;

.....

if (matchesA(uriInfo.getAbsolutePath())) {
    // do something
}

答案 1 :(得分:3)

不确定你的应用程序的URI是什么样的,但是如果可以将你的应用程序分成两个servlet或过滤器,那么你可以这样做 - 即有一个servlet /过滤器提供一组资源并包括第一个映射器,让另一个servlet / filter服务于另一组资源,并包含另一个映射器。

如果这些是自定义异常,您还可以将Request作为参数传递给异常并且只有一个映射器 - 根据映射器中的请求uri确定响应。