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

时间:2010-11-17 19:23:50

标签: spring rest jersey

我在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()没有,这意味着它永远不会进入该方法。

我能错过什么?

1 个答案:

答案 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所有内容。所以,这解决了我的问题,但有谁知道这是一个错误吗?或者,为什么这应该是它的工作方式?