Jersey与PathParams

时间:2014-09-08 06:34:02

标签: java eclipse tomcat

我正在尝试将PathParams请求中的GET传递给我的网络服务。这是服务核心:

@Path("/")
public class MyService {

    @GET
    @Produces
    public String getIntentClassIds() {
        return "this works fine";
    }

    @GET
    @Path("/{x}")
    @Produces
    public String getIntentClassById(@PathParam("x") String intentClassId) {
        return "This does not work";
    }       
}

我的 web.xml 如下所示:

<servlet>
    <servlet-name>MyService API</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>com.mypackagename</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>MyService API</servlet-name>
    <url-pattern>/MyService</url-pattern>
</servlet-mapping>

当我这样打电话给我的服务时:

localhost:8080/MyService按预期返回this works fine。但是当我尝试传递这样的参数时:localhost:8080/MyService/pathParam它会抛出一个404。有线索吗?

4 个答案:

答案 0 :(得分:1)

尽量不在web.xml中声明MyService,只需声明jersy调度程序, 并在课堂上声明你的服务:

未经过测试

@Path("/MyService")
public class MyService {

    @GET
    @Produces
    @path("getIntentClassIds")
    public String getIntentClassIds() {
        return "this works fine";
    }

    @GET
    @Path("getIntentClassById/{x}")
    @Produces
    public String getIntentClassById(@PathParam("x") String intentClassId) {
        return "This does not work";
    }

}  

web.xml不应该映射到您的服务MyService: 应该看起来像这样

<servlet>
    <servlet-name>MyService API</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>com.mypackagename</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>MyService API</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

查看here以获取更多信息

答案 1 :(得分:0)

我认为你不需要斜线:

@Path("/{x}")

将其更改为:

@Path("{x}")

答案 2 :(得分:0)

如果您在课程级别@Path("/"),我认为您不再需要方法级别。

这就像是

localhost:8080/MyService/(/ -> this is at service class level)[If you keep another here ; I think it cannot parse]pathParam

答案 3 :(得分:0)

使用此:

<url-pattern>/MyService/*</url-pattern>

web.xml

来电URL将为/MyService/something/dosomemore

在你的java文件中,

@Path("/something")
public class MyService {

    @GET
    @Produces
    public String getIntentClassIds() {
        return "this works fine";
    }

    @GET
    @Path("/dosomemore")
    @Produces
    public String getIntentClassById(@PathParam("x") String intentClassId) {
        return "This does not work";
    }       
}