我在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";
}
}
我在一个名为factorlab-ws的webapp中将应用程序部署到Jetty。 curl http://localhost:8080/factorlab-ws/reports
取得成功。但是curl http://localhost:8080/factorlab-ws/reports/testitem
会给出404状态。
另外,我在ReportsResouce的每个方法中加入了断点。 getTestText()中断了,但getTimelineResource()没有,这意味着它永远不会进入该方法。
我能错过什么?
答案 0 :(得分:0)
我发现了问题 - 它出现在我的web.xml中。我已经为servlet映射到Jersey Spring servlet配置了几个路径,但这没有用。工作是什么:
<servlet-mapping>
<servlet-name>jersey-spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我无法使任何其他映射工作 - 除了明确的url-pattern之外,给我404所有内容。所以,这解决了我的问题,但有谁知道这是一个错误吗?或者,为什么这应该是它的工作方式?