Java 未找到Jersey REST Web服务子资源

Java 未找到Jersey REST Web服务子资源,java,web-services,rest,jersey,Java,Web Services,Rest,Jersey,起初在我的web服务器中,我只有一个RESTservlet。比如: @Path("/") public class Controller { @GET @Produces({ MediaType.TEXT_HTML }) public Response get(@Context UriInfo info) throws Exception { ... } @GET @Path("resource1") @Produces({ MediaType.TEXT_H

起初在我的web服务器中,我只有一个RESTservlet。比如:

@Path("/")
public class Controller {
  @GET
  @Produces({ MediaType.TEXT_HTML })
  public Response get(@Context UriInfo info) throws Exception {
    ...
  }

  @GET
  @Path("resource1")
  @Produces({ MediaType.TEXT_HTML })
  public Response resource1() throws Exception {
    ...
  }

  ...

 }
以及web.xml:

 <servlet>
    <servlet-name>rest</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>xpto.mypack1;xpto.mypack2</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

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

休息
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
xpto.mypack1;xpto.mypack2
1.
休息
/*
但后来我想向服务器添加一些静态html,所以我将servlet映射更新为 /休息/*

控制器servlet类的@Path指令从“/”到“/rest”。一切正常,但带有@path指令的控制器的子资源或方法停止工作。。即:

  • /工作正常,因为我在根目录下有一个index.html页面
  • /rest工作正常,它调用servlet的get方法
  • /rest/resource1返回404 http代码
有什么帮助吗?我已经尝试了每个@Path指令的/after和before组合列表,但没有成功。。。非常感谢

一个更新:

我使用了trace util,得到了以下结果:

对于/[app name]/rest(有效):

  • X-Jersey-Trace-002接受右侧路径java.util.regex.Matcher[pattern=/rest(/.*)region=0,11 lastmatch=/rest]:“/rest”->“/rest”:”
  • X-Jersey-Trace-003接受资源:“rest”->@Path(“/rest”)xpto.mypack.Controller
  • X-Jersey-Trace-000接受根资源类:“/rest”
  • X-Jersey-Trace-001匹配路径“/rest”->“/application.wadl(/)?”,“/rest(/)?”
对于/[app name]/rest/resource1(它不起作用):

  • X-Jersey-Trace-002匹配的异常映射程序:com.sun.Jersey.api。NotFoundException@4fd41dc3->xpto.myclass
  • X-Jersey-Trace-003将异常映射到响应:com.sun.Jersey.api。NotFoundException@4fd41dc3->404(未找到) X-Jersey-Trace-000接受根资源类:“/resource1” X-Jersey-Trace-001匹配路径“/resource1”->“/application.wadl(/)?”,“/rest(/)?”

我希望有人能帮助我。

如果将servlet映射定义为
/rest/*
,请不要在资源的
@Path
注释中重复
/rest
。也就是说,您所需要做的就是保持控制器的原样(在上面的问题中),只需更改servlet映射即可。资源可用的URL为:

<application_context_path>/<servlet_mapping>

您是否尝试过将路径设置为
(“/resource1”)
是的,我尝试过,结果相同。我试着调试以找出发生了什么,我发现与模式进行比较的url部分只是“rest”之后的部分。以rest结尾的部分被视为“基本url”。这让我很困惑。顺便说一下,我用的是tomcat(现在我什么都看不懂了……我从控制器@Path中删除了斜杠,使之成为@Path(“”),一切正常……有人能解释一下原因吗?:SDo你是说用“/rest”作为servlet\u映射和@Path(“/”)还是“/rest/*”和@Path(“/”)?
<application_context_path>/rest/rest/*