Sto provando, utilizzando Jersey & Google Guice 3.0, per mappare 2 diversi pattern URL allo stesso servlet e ognuno di questi pattern URL da applicare a un altro pacchetto nel mio progetto.Google Guice e Jersey più pattern URL per lo stesso servlet durante l'applicazione del filtro pacchetti
Per essere chiari, sto incollando parte del codice qui sotto e spiegherò anche.
web.xml
<listener>
<listener-class>com.abc.web.listeners.GuiceContextListener</listener-class>
</listener>
<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>
GuiceContextListener
public final class GuiceContextListener extends GuiceServletContextListener {
...
private JerseyServletModule getJerseyServletModule() {
JerseyServletModule jerseyModule = new JerseyServletModule() {
@Override
protected void configureServlets() {
filter("/*").through(WebServerStateFilter.class);
final Map<String, String> params = new HashMap<String, String>();
StringBuilder sb = new StringBuilder();
sb.append("com.abc.web.stats.services");
params.put(PackagesResourceConfig.PROPERTY_PACKAGES, sb.toString());
serve("/api/v1/*").with(GuiceContainer.class, params);
final Map<String, String> params1 = new HashMap<String, String>();
StringBuilder sb1 = new StringBuilder();
sb1.append("com.abc.web.stats.otherservices");
params1.put(PackagesResourceConfig.PROPERTY_PACKAGES, sb1.toString());
serve("/api/*").with(GuiceContainer.class, params1);
}
}
}
...
}
Quindi, fondamentalmente voglio:
- URL inizia con "/ api/v1/*" da gestire tramite servlet GuiceContainer dai servizi nel pacchetto "com.abc.web.stats. servizi "
- URL che iniziano con "/ API/*" ad essere gestite tramite lo stesso GuiceContainer servlet dai servizi a pacchetto" com.abc.web.stats. otherservices "
ho usato il codice di cui sopra, ma non sembra funzionare, sembra che solo il primo 'servire' chiamata viene presa in considerazione in modo in questo caso solo gli URL matching"/api/v1/*" sono serviti. io non voglio hardcode 'v1' nei miei servizi dal momento che la versione potrebbe cambiare (in 'v2') in futuro.
qualcuno può darmi una mano?
Grazie, Paul