泽西岛2.5作为过滤器http状态404

时间:2014-12-13 02:55:45

标签: java rest servlet-filters jersey-2.0

我已将Jersey 2.5应用程序部署为过滤器,但在访问此(或任何资源)URL时,我收到HTTP Status 404 - Not Found错误:

本地主机:8080 / [应用程序的名字] /休息/用户/新

此应用程序部署为servlet时,此URL工作正常。如果我将'filter'标签转换为'servlet'标签,则网址会再次起作用。

启动时没有异常,之前设置的断点不再被触发。就好像没有找到资源类一样。知道会出现什么问题吗?

我的web.xml:

<filter>
    <filter-name>jerseywebapp</filter-name>
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.[pkg].resources</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>
            org.glassfish.jersey.media.multipart.MultiPartFeature, 
            org.glassfish.jersey.server.mvc.jsp.MvcFeature, 
            org.glassfish.jersey.server.mvc.jsp.JspMvcFeature, 
            org.glassfish.jersey.jackson.JacksonFeature
        </param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
        <param-value>/WEB-INF/views</param-value>
    </init-param>
     <!-- 
    <load-on-startup>1</load-on-startup>
     -->
</filter>
<filter-mapping>
    <filter-name>jerseywebapp</filter-name>
    <url-pattern>/rest/*</url-pattern>
</filter-mapping>

1 个答案:

答案 0 :(得分:1)

根据我的经验,将service代码更改为filter代码的工作方式相同,但需要注意的是@Path("...")注释 <url-pattern>的背景。您必须手动将模式添加到路径注释中。

例如,在web.xml中使用此XML:

...
<servlet-mapping>
    <servlet-name>jerseywebapp</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

使用此配置,您可以在/rest/test/ping获得与此路径注释的匹配:

@Path("test")
public class Test {

   @GET
   @Path("ping")
   public Response getPing() {
      ....
   }

现在,如果我们切换到使用filter代码:

...
<filter-mapping>
    <filter-name>jerseywebapp</filter-name>
    <url-pattern>/rest/*</url-pattern>
</filter-mapping>

请注意,要仍然在/rest/test/ping点击我们的端点,我们需要将我们的类@Path注释从&#34; test&#34; 更改为& #34;其余/测试&#34;

@Path("rest/test")
public class Test {

   @GET
   @Path("ping")
   public Response getPing() {
      ....
   }