调用在URL中具有查询参数的“REST”服务

时间:2013-02-08 10:59:16

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

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

端点是这样的:

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

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

现在,我正在尝试使用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对网址进行编码)?

2 个答案:

答案 0 :(得分:10)

使用查询方法指定参数:

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);

答案 1 :(得分:0)

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

请替换你的行

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

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