2

私の 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 エンコードされた値に変更すると、正常に動作します。

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 に答える