使用参数调用RESTful Web服务

时间:2011-07-03 06:24:45

标签: java web-services rest parameter-passing

我有一个简单的RESTful Web服务,可以打印“Hello World!” 我正在使用NetBeans,代码如下:

package resource;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;


@Path("simple")
public class SimpleResource {

    @Context
    private UriInfo context;

    /** Creates a new instance of SimpleResource */
    public SimpleResource() {
    }

    @GET
    @Produces("application/xml")
    public String getXml() {
        //TODO return proper representation object
        return "<greeting>Hello World !</greeting>";
    }

    @PUT
    @Consumes("application/xml")
    public void putXml(String content) {
    }
}

我通过以下网址呼叫此网络服务:http://localhost:8080/WebService/resources/simple。 现在,我想向此Web服务发送一个参数,然后在“Hello world”消息之后打印此参数。

我们怎么能这样做?

谢谢!

3 个答案:

答案 0 :(得分:23)

在REST中处理参数的两种主要方法是通过解析路径并通过提取查询部分。

路径参数

这些处理这种情况 - /foo/{fooID} - 其中{fooID}是一个模板,将被您想要的参数替换:

@GET
@Produces("text/plain")
@Path("/foo/{fooID}")
public String getFoo(@PathParam("fooID") String id) {
    // ...
}

这些非常适用于您可以将参数视为描述资源的情况。

查询参数

这些处理这种情况 - /?foo=ID - 就像你从传统的表单处理中得到的那样:

@GET
@Produces("text/plain")
@Path("/")
public String getFoo(@QueryParam("foo") String id) {
    // ...
}

对于您认为参数描述资源的附件而不是资源本身的情况,这些非常有用。 @FormParam注释非常相似,除了用于处理POSTed表单而不是GET样式参数

其他类型的参数

JAX-RS规范支持其他类型的参数处理(矩阵参数,标题参数,cookie参数),它们与程序员的工作方式大致相同,但使用起来比较少见或更专业。开始探索细节的合理位置是JAX-RS javadoc本身,因为它具有有用的链接。

答案 1 :(得分:3)

接受URl参数的Web服务的示例代码如下所示:

@GET
@Path("/search")
public String getUserDetailsFromAddress(
              @QueryParam("name") String name) {
  return "Hello"+name;
}

,网址将如下:

http://localhost:8080/searchapp/mysearch/search?name=Tom

答案 2 :(得分:0)

尝试添加如下路径注释:

@javax.ws.rs.Path(“/bookstore/books/{bookId}”)