我有一个看起来像这样的资源:
@Path("/Resources/Console") public class ConsoleResource { @POST @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public String post(/* */) { /* */ } }
每当按以下方式配置我的JerseyServletModule时,服务就会工作:
@Override protected void configureServlets() { bind(ConsoleResource.class); bind(MessageBodyReader.class).to(JacksonJsonProvider.class); bind(MessageBodyWriter.class).to(JacksonJsonProvider.class); serve("/*").with(GuiceContainer.class); }
但是诸如index.html之类的东西却没有。更改"/*"为"/Resources/*"会再次使index.html之类的东西起作用,但是之后ConsoleResource的@POST方法不起作用(每次访问都会得到404 /Resources/Console)。我想我想让后者工作。有什么想法吗?
"/*"
"/Resources/*"
ConsoleResource
@POST
/Resources/Console
谢谢!
问题最终是服务器通过各种过滤器等运行静态内容。通过将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>/Resources/*</url-pattern> </filter-mapping>
遵循惯例,即我的资源将/Resources/以其路径的前缀开头,静态内容将通过Guice过滤器。
/Resources/