未找到Jersey REST Web服务子资源

时间:2012-09-07 10:56:33

标签: java web-services rest jersey

首先在我的Web服务器中,我只有一个REST servlet。类似的东西:

@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>

但后来我想在服务器上添加一些静态html,所以我将servlet映射更新为     /休息/ *

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

  • /工作正常,因为我在root上有一个index.html页面
  • / rest工作正常,它调用我的servlet的get方法
  • / rest / resource1返回404 http code ...

有任何帮助吗?我已经尝试了每个@Path指令之前和之后的组合列表,没有成功......非常感谢

一次更新:

我使用了trace util并获得了以下结果:

/ [app-name] / rest(可行):

  • X-Jersey-Trace-002接受右手路径java.util.regex.Matcher [pattern = / rest(/.*)? region = 0,11 lastmatch = / rest]:“/ rest” - &gt; “/ rest”:“”
  • X-Jersey-Trace-003接受资源:“休息” - &gt; @Path(“/ rest”)xpto.mypack.Controller
  • X-Jersey-Trace-000接受根资源类:“/ rest”
  • X-Jersey-Trace-001匹配路径“/ rest” - &gt; “/application.wadl(/。)?”,“/ rest(/.)?”

/ [app-name] / rest / resource1(它不起作用):

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

我希望有人帮助我......

0 个答案:

没有答案