代码之家  ›  专栏  ›  技术社区  ›  jhericks

泽西岛春天总是给子资源404

  •  2
  • jhericks  · 技术社区  · 14 年前

    我在Spring配置的Web服务应用程序中有两个简单的资源类。根目录(/reports)正常工作,而后面的任何路径都返回404。以下是资源类:

    package com.factorlab.ws.reports;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    @Component
    @Scope("prototype")
    @Path("reports")
    public class ReportsResource {
    
        @Autowired
        private TestItemResource timelineResource;
    
        @Path("testitem")
        public TestItemResource getTimelinResource() {
            return timelineResource;
        }
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String getTestText() {
            return "Success!\n";
        }
    }
    

    子资源在这里:

    package com.factorlab.ws.reports;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    @Component
    @Scope("prototype")
    public class TestItemResource {
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return "Success!\n";
        }
    }
    

    我将应用程序部署到一个名为factrlab-ws的webapp中的jetty。 curl http://localhost:8080/factorlab-ws/reports 获得成功。然而 curl http://localhost:8080/factorlab-ws/reports/testitem 给出404状态。

    另外,我在reportsResouce中的每个方法中都放置了断点。gettestText()可以正常中断,但getTimeLineResource()没有中断,这意味着它从未进入该方法。

    我能错过什么?

    1 回复  |  直到 14 年前
        1
  •  0
  •   jhericks    14 年前

    我发现了这个问题——它在我的web.xml中。我已经为servlet映射到Jersey Spring servlet配置了几个路径,但这并没有起作用。工作内容是:

    <servlet-mapping>
        <servlet-name>jersey-spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    我不能让任何其他的映射工作-除了显式的URL模式之外,所有东西上都有404。所以,这解决了我的问题,但有人知道这是否是一个bug吗?或者有什么理由认为这就是它的工作方式吗?