0

リソースをインターフェースに分割しました-より理にかなっているのでimplですが、リソースをスキャンするようにした場合、これは最新リリースのジャージではサポートされていないようです。

web.xmlでリソースを手動で定義するにはどうすればよいですか?web.xmlでリソースimplを手動で定義した場合、これは機能しますか?

ありがとうアレックス

4

1 に答える 1

1

[1]。javax.ws.rs.core.Applicationを拡張する Java クラスを作成し、リソースを登録します。

public class MyRESTApp 
     extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();

        s.add(MyResource.class);
        ....

        return s;
    }
}

[2]。web.xml でアプリケーションを登録するspringを使用している場合は、web.xml で:

<servlet>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
    <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.xxx.MyRESTApp</param-value>
    </init-param>
    ...
</servlet>

guiceを使用している場合、web.xml で:

<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>guiceFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>com.xx.MyGuiceServletContextListener</listener-class>
</listener>

次に、 com.google.inject.servlet.GuiceServletContextListenerを拡張する Java クラス MyGuiceServletContextListener を作成します。

public class MyGuiceServletContextListener 
     extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        Guice.createInjector(new JerseyServletModule() {
@Override
protected void configureServlets() {
        // Route all requests through GuiceContainer
        // IMPORTANT
        // If this property is not defined guice tries to find the @Path annotated types defied at the injector
        Map<String,String> params = new HashMap<String, String>();
        params.put("javax.ws.rs.Application",
        MyRESTApp.class.getName());
        serve("/*").with(GuiceContainer.class,
                         params);
        });
    }
}
于 2013-10-19T21:17:20.377 に答える