在我的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编码值,它可以正常工作。
答案 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,看看你是否明白(你必须适应你的代码 - 这不是完全适合你)