简体   繁体   中英

Jersey + Guice + Tomcat producing 404 when served with something other than root directory

I have a resource that looks like this:

@Path("/Resources/Console")
public class ConsoleResource {

    @POST
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public String post(/* */) {
        /* */
    }

}

Whenever my JerseyServletModule is configured as follows, the services work:

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

    bind(MessageBodyReader.class).to(JacksonJsonProvider.class);
    bind(MessageBodyWriter.class).to(JacksonJsonProvider.class);

    serve("/*").with(GuiceContainer.class);
}

But things like index.html don't. Changing "/*" to "/Resources/*" causes things like index.html to work, again, but then ConsoleResource 's @POST method doesn't work (I get a 404 whenever I access /Resources/Console ). I assume I want to get the latter working (like this ). Thoughts?

Thanks!

The issue ended up being the server running static content through the various filters and whatnot. By editing the web.xml file to be the following:

<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>/Resources/*</url-pattern>
</filter-mapping>

And abiding by the convention that my resources would have /Resources/ as a prefix to their path, static content gets through the Guice filter.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM