2

在我的 Android 项目中,我将 Robospice 与 spring-android 一起使用。这适用于所有 REST 通信。但是对于下面的请求查询参数“=”被转换为“&”。因此,请求失败。

请求参数: tags=["keywords:default=hello"]

通过检查日志,请求被转换如下,以便库调用。

http://XXX/rest/media/search?token=123&tags=%5B%22keywords:default&hello%22%5D

这里“=”符号在“keywords:default=hello”中转换为“&”

请求类

这里 tags = String.format("[\"keywords:default=%s\"]", mTag);

@Override
public MVMediaSearch loadDataFromNetwork() throws Exception
{ 
  String search=""; 
  if(!tags.equals(Constants.EMPTY_DATA)) 
    search="&tags="+tags;
  return   getRestTemplate().getForObject( Constants.BASE_URL+"/media/search?token="+token+search, MVMediaSearch.class ); 
}

如果我在浏览器中触发 URL,则会出错。如果我在浏览器中将“&”符号更改为相应的 url 编码值,它就可以正常工作。

4

2 回答 2

2

我也有同样的问题。作为替代方案,我使用 getForObject(java.net.URI, java.lang.Class)。

URI uri = new URI(Constants.BASE_URL+"/media/search?token="+token+search);
getRestTemplate().getForObject(uri, MVMediaSearch.class );

http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/client/RestTemplate.html#getForObject(java.net.URI , java.lang.Class)

于 2013-09-12T10:16:29.580 回答
0

你可以这样做:

URI uri = new URI(
    "http",
    Constants.BASE_URL, 
    "/media/search?token=", 
    token,
    search,
    null);
String request = uri.toASCIIString();

看看这个,看看你是否理解(你必须适应你的代码 - 这还没有完全为你完成)

于 2013-09-05T10:43:05.413 回答