一重引用符文字を含むURLを使用してAPIにリクエストを送信したいとします。 retrofit2を使用しています。HTTP URLの一重引用符をエンコードするためにRetrofitを使用しないでください。
私はこのURLがAPIに到達したい:?http://someapp.somecompany.com/api/contents/inc() $フィルタ= _id%20eq%20'57fb60534421dd35544b27a9'
私は、符号化(=真のエンコード)で@queryと@QueryMap注釈を試してみましたが、また、( = false)のプロパティが、私の試行のどれもうまくいきませんでした。
MyClientという(インタフェース)
@PUT("api/contents/inc()")
Call<Object> addLike(@QueryMap(encoded =true) Map<String,String> options);
MainActivity(活動)
Map<String,String> likeMap = new HashMap<>();
likeMap.put("$filter","_Id%20eq%20'57fb60534421dd35544b27a9'");
Call<Object> addLikeCall = myClient.addLike(likeMap);
addLikeCall.enqueue(new Callback<Object>() {.....});
このコードは、私にこの出力を与える:
- > 0をPUT$フィルタ= _id%20eq%20%2757fb60534421dd35544b27a9%27 HTTP/1.1(0バイト本体)
< - ??500内部サーバーエラーhttp://someapp.somecompany.com/api/contents/inc() $フィルタ= _id%20eq%20%2757fb60534421dd35544b27a9%27(132ms 、36バイトのボディ)
URLに一重引用符をエンコードするための改造を避けるにはどうすればよいですか?
ありがとうございました。
私はちょうどあなたの提案の反対をしたいです。改造して私のキャラクターを '%27'に置き換えたくないのです。インターセプタクラスで '%27'部分文字列を' ''文字に置き換えようとしましたが、私が望む結果を得ることができませんでした。 – user2949556
サーバーサイドで別のキャラクターに変更し、サーバー側でそれを逆転させるという規則を持っていない限り、これを行うことはできません。自動的に変更されることなく、あなたのURLにこれらの文字を持つことはできません。あなたのURLにこれらの文字を持つことができないそのWebプロトコル –
私は、内部サービスのエラーは、Webサービスプロバイダによってサーバー側で自動的に逆転されるため、その単一引用のためではないと考えています –