2016-12-28 16 views
0

私はAPIにリクエストしてユーザーをログインさせようとしていますが、encoded = trueに設定されていても、Retrofit 2メソッドでエンコードされるセクションがあります。ベースURLはhttps://testapi.test.ieです。serverextとして渡されるパラメータはmdc.php?action=ですが、encoded = trueを設定した後でも、結果のリクエストボディはhttps://testapi.test.ie/mdc.php%3Faction=login_user&ts=1482924232742です。https://testapi.test.ie/mdc.php?action=login_user&ts=1482924232742ですので、問題が?シンボルであることがわかります。以下は私の改造方法は、誰もがこれを助けることができるならば、私は正しいRetrofit 2エンコーディングの特殊文字に関する問題

@retrofit2.http.POST("/{serverext}login_user&ts={timestamp}") 
@retrofit2.http.Multipart 
Call<LoginResponseModel> loginUser(@retrofit2.http.Path(value = "serverext", encoded = true) String server, 
          @retrofit2.http.Part(Constants.USER) String username, 
          @retrofit2.http.Part(Constants.PASS) String password, 
          @retrofit2.http.Path("timestamp") Long timestamp); 

答えて

1

誤って使用します。パスはパス、クエリーはクエリーです。これを個別に使用するには、コードを書き直す必要があります。

@retrofit2.http.POST("{serverext}") 
@FormUrlEncoded 
Call<LoginResponseModel> loginUser(@retrofit2.http.Path(value = "serverext", encoded = true) String server, 
          @retrofit2.http.Field(Constants.USER) String username, 
          @retrofit2.http.Field(Constants.PASS) String password, 
          @retrofit2.http.Query("timestamp") Long timestamp, 
          @retrofit2.http.Query("action") String action); 

loginUser("mdc.php", username, pass, 42, "login_user") 
+0

この形式に変更すると、要求は正しく形成されますが、APIからのエラー応答が返されます。無効な資格情報は、資格情報が正しいため正しくありません。私は、@ Queryでなく@Pathとして必要と思う。私は1.9からアップグレードしていて、それは@ Pathで正しく動作していました。このエンコーディングの特殊文字はretrofit2またはokhttp3の制限ですか? –

+0

私はエンコーディングについてはわかりませんが、APIを正しく使用していません。あなたの要求を確認できますか?実際に間違っているのは何ですか? –

+0

私は現在、1.9から2.0にアップグレードしています。1.9では、@POST( "/ {server} login_user&ts = {timestamp}")のようにAPIを使用しました。 @ Multipart void loginUser(@Path(value = "server" (タイムスタンプ、タイムスタンプ、コールバックコールバック); 'これは機能しました(エンコードはfalseです)このテストはサーバからの結果が正しいことを証明するものです。 –

0

あなたは@FormUrlEncodedを使用する必要が達成するためにそれをいただければ幸いです。すべての宣言にパッケージ名を含める必要はありません!ちょうどそれらをインポート!そのよりきれいできれいな!

@POST("/{serverext}login_user&ts={timestamp}") 
    @Multipart 
    @FormUrlEncoded 
    Call<LoginResponseModel> loginUser(@Path(value = "server", encoded = true) String server, 
             @Part(SyncStateContract.Constants.USER) String username, 
             @Part(SyncStateContract.Constants.PASS) String password, 
             @Path("timestamp") Long timestamp); 
+0

こんにちは、パッケージ名の宣言は私が現在行っている1.9からRetrofit2にアップグレードできるようにすることです。私はすでに '@ FormUrlEncoded'を試していましたが、うまくいきませんでした。私は'? 'でエンコードされています。助けてくれてありがとう、他の提案はありますか? –

+0

誰もこれに関する情報を持っていますか?私が 'encoded = true'を設定した理由は'? 'はまだコード化されていますか? –

+0

あなたがしたくない場合は?なぜあなたは 'encoded = true'を作りましたか?単にそれを残すか、またはそれを 'false'にしてください。 –

関連する問題