Próbuję, używając Jersey & Google Guice 3.0, mapować 2 różne wzorce adresów URL do tego samego serwletu i każdego z tych wzorców adresów URL, które mają być zastosowane do innego pakiet w moim projekcie.Google Guice & Jersey wiele wzorców adresów URL do tego samego serwletu podczas stosowania filtrowania pakietów
Aby było jasne, wklejam część kodu poniżej, a także wyjaśnię.
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);
}
}
}
...
}
Więc zasadniczo chcę:
- adresy zaczynające się od "/ api/v1/*" do obsługi za pomocą serwletu GuiceContainer według usług w pakiecie "com.abc.web.stats. usługi „
- adresy URL zaczynające «/ api/*» być obsługiwane przez samego serwletu GuiceContainer przez usługi w pakiecie” com.abc.web.stats. otherservices „
użyłem kodu powyżej, ale nie wydaje się do pracy, wydaje się, że tylko pierwsza«służyć»rozmowa jest brane pod uwagę, więc w tym przypadku tylko adresy URL pasujące”/api/v1/*”są podawane. nie chcę hardcode«v1»w moich usług od wersji może się zmienić (z«v2») w przyszłości.
Czy ktoś mógłby mi pomóc?
Dzięki, Paul