使用参数调用RESTful Web服务

M.M*_*M.M 10 java rest web-services 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) {
    }
}
Run Code Online (Sandbox Code Playgroud)

我从这个URL调用这个Web服务:http://localhost:8080/WebService/resources/simple.现在,我想向此Web服务发送一个参数,然后在"Hello world"消息之后打印此参数.

我们怎么做?

谢谢!

Don*_*ows 23

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

路径参数

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

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

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

查询参数

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

@GET
@Produces("text/plain")
@Path("/")
public String getFoo(@QueryParam("foo") String id) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这些对于您认为参数描述资源的附件而非资源本身的情况非常有用.该@FormParam注释是非常相似的,除了它是用于处理提交的表单,而不是GET风格参数

其他类型的参数

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