Guice + Jersey:添加所有资源和提供程序而不绑定到Jersey Servlet

时间:2011-08-11 12:58:23

标签: java jersey guice

我目前正在使用Jersey 1.8和Guice 3.0一起为我的JPA制作DI的球衣应用程序。这很好地解决了我无法克服的一个主要问题:

我必须使用bind:

手动将所有Jersey资源类添加到JerseyServletModule
@Override
protected Injector getInjector() {
    return Guice.createInjector(new JerseyServletModule() {

        @Override
        protected void configureServlets() {

            install(new JpaPersistModule("DBName"));
            filter("/*").through(PersistFilter.class);

            /* bind the REST resources and serve*/
            bind(Hello.class);
            serve("/*").with(GuiceContainer.class);

        }
    });
}

我希望能够省略对每个资源和提供者使用bind,并在jersey-guice doc中找到一条评论:http://jersey.java.net/nonav/apidocs/1.8/contribs/jersey-guice/com/sun/jersey/guice/spi/container/servlet/package-summary.html

它基本上表明可以将球衣资源的注册传递给球衣servlet。但是我无法使用所述方法来管理这个:

@Override
     protected Injector getInjector() {
         return Guice.createInjector(new JerseyServletModule() {

             @Override
             protected void configureServlets() {
                 bind(GuiceResource.class);

                 Map<String, String> params = new HashMap<String, String>();
                 params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "unbound");
                 serve("/*").with(GuiceContainer.class, params);
             }
         }
     });

可悲的是,我无法获得有关球衣资源注册过程的更多信息。

任何帮助将不胜感激。当然,如果需要,我可以提供额外的信息! 谢谢。

1 个答案:

答案 0 :(得分:11)

我回答我自己的问题变得相当标准,但我从Guice 2线程中找到了答案,但幸运的是它与Guice 3和Jersey 1.8一起使用

/*
* The following line will scan ausbdsoccer.server.resources package for Jersey Resources
*/
params.put("com.sun.jersey.config.property.packages","ausbdsoccer.server.resources");

你去。

别忘了将params Map传递给你的GuiceContainer.class!