URL查询参数字符串“=”转换为“&”

时间:2013-09-05 09:14:36

标签: android spring query-string robospice

在我的Android项目中,我正在使用带有spring-android的Robospice。这适用于所有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编码值,它可以正常工作。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您可以这样做:

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

看看THIS,看看你是否明白(你必须适应你的代码 - 这不是完全适合你)