【问题标题】:Invoking a 'REST' service which have query parameters in the URL调用在 URL 中具有查询参数的“REST”服务
【发布时间】:2013-01-24 03:05:27
【问题描述】:

我必须在返回 text/xml 的服务上调用 GET。

端点是这样的:

http://service.com/rest.asp?param1=34&param2=88&param3=foo

当我直接在浏览器(或某些 UI 工具)上点击此 URL 时,一切都很好。我收到了回复。

现在,我正在尝试使用CXF WebClient 来获取结果,使用如下代码:

String path = "rest.asp?param1=34&param2=88&param3=foo";

webClient.path(path)
    .type(MediaType.APPLICATION_JSON)
    .accept(MediaType.TEXT_XML_TYPE)
    .get(Response.class);

我正在调试代码,发现正在发送的请求是 url 编码的,看起来像这样:

http://service.com/rest.asp%3Fparam1=34%26param2=88%26param3=foo

现在,问题是服务器似乎无法理解这个带有编码内容的请求。它会抛出 404。在浏览器上点击这个编码的 url 也会导致 404。

我应该怎么做才能成功获得响应(或不让 WebClient 对 url 进行编码)?

【问题讨论】:

    标签: java web-services rest cxf web-client


    【解决方案1】:

    使用查询方法指定参数:

    String path = "rest.asp";
    webClient.path(path)
        .type(MediaType.APPLICATION_JSON)
        .accept(MediaType.TEXT_XML_TYPE)
        .query("param1","34")
        .query("param2","88")
        .query("param3","foo")
        .get(Response.class);
    

    【讨论】:

    • 谢谢安德烈。这正是我所需要的。我查看并打算使用 .query 但误解了文档。
    【解决方案2】:

    您需要对您的网址进行编码。您可以使用如下所示的 URLEncoder 类来完成:

    请换行

    String path = "rest.asp?param1=34&param2=88&param3=foo";
    

    String path = URLEncoder.encode("rest.asp?param1=34&param2=88&param3=foo");
    

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多