使用RestEasy的UriInfo的Guice提供程序

时间:2019-02-22 15:07:41

标签: java dependency-injection jersey guice resteasy

我有一个Web应用程序正在从Jersey移植到RestEasy。该应用程序将Guice用于CDI。

该应用程序使用Guice提供程序注入UriInfo。在Jersey版本中,此代码如下所示:

public static class JerseyIntegrationModule extends AbstractModule {
    @Override protected void configure() {
        bind(WebApplication.class).to(WebApplicationImpl.class).in(Scopes.SINGLETON);
    }

    @Provides @RequestScoped
    public HttpContext getHttpContext(WebApplication webapp) {
      return webapp.getThreadLocalHttpContext();
    }

    @Provides @RequestScoped
    public UriInfo getUriInfo(HttpContext httpContext) {
      return httpContext.getUriInfo();
    }
}

所有这些类WebApplicationHttpContext等都是特定于Jersey的。问题是如何在RestEasy下提供类似的功能。

一次尝试是

public class MyServlet extends ServletModule {
    @Provides @RequestScoped
    public UriInfo getUriInfo(@Context UriInfo info) {
        return info;
    }
}

但这会导致Guice的注入代码中的堆栈溢出。

我知道@Context属性应该允许我在RestEasy下注入UriInfo,但是我不知道要在Guice提供程序中使用它。

该应用程序将部署在Wildfly 15上。

任何帮助都非常感激,因为这使我的头部旋转。

2 个答案:

答案 0 :(得分:0)

似乎有一种解决方案

public class MyServlets extends ServletModule {

  @Provides @RequestScoped
  public UriInfo getUriInfo() {
    return ResteasyProviderFactory.getContextData(UriInfo.class);
  }

}

答案 1 :(得分:0)

Resteasy随RequestScopeModule一起提供UriInfo,HttpServletRequest等。

更多信息http://docs.jboss.org/resteasy/docs/3.6.3.Final/userguide/html_single/index.html#Guice1