【问题标题】:Invoke RESTful webservice with parameter使用参数调用 RESTful Web 服务
【发布时间】:2011-07-03 06:24:44
【问题描述】:

我有一个简单的 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) {
    }
}

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

我们该怎么做?

谢谢!

【问题讨论】:

    标签: java web-services rest parameter-passing


    【解决方案1】:

    在 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 注释非常相似,只是它用于处理 POST 表单而不是 GET 样式的参数

    其他类型的参数

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

    【讨论】:

    • 谢谢Donal,但我如何提取“fooID”参数并打印出来?
    • 我的示例代码 extractsdecodes 参数并将其 作为参数传递 给方法,无论您采用哪种风格'正在使用。您所要做的就是编写决定如何处理它的位;出于演示目的,将它与一些样板连接成一个字符串并返回它可以正常工作。你肯定能写那一点点吗?
    • 谢谢,这真的很有帮助 Donal 只是一件事,对于我的应用程序 URL,这个可以正常工作吗? localhost:8080/WebService/resources/simple/idValue
    • @Mohammed:是的。您可能需要在 @Path 注释中使用更长的值来描述要解析的路径,但这确实非常简单。只需写下路径,标记您要填写的插槽以便为其命名,并将名称绑定到带有@PathParam的参数。
    【解决方案2】:

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

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

    网址会是这样的:

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

    【讨论】:

      【解决方案3】:

      尝试像这样添加路径注释:

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

      【讨论】:

      • 我们如何在 getXml() 中打印 bookId ?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多