2016-06-22 13 views
0

/api/method?page=1.jsonのようなエンドポイントを生成したいのですが、最後に/api/method.json?page=1のようにクエリが挿入されるという問題があります。Retrofit - クエリを挿入した後にエンドポイントの末尾にテキストを追加

// from my service 
@GET("method.json") 
Call<Void> method(@Query("page") int page); 

// building retrofit 
new Retrofit.Builder() 
      .baseUrl(URL) 
      .client(httpClient) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

更新/続い作品が、私は答える@Blackbeltは最高の一つです。あなたが好きなものを使用することができます

HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
    logging.setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BASIC : HttpLoggingInterceptor.Level.NONE); 
    return new OkHttpClient.Builder() 
      .addInterceptor(logging) 
      .addInterceptor(new Interceptor() { 
       @Override 
       public Response intercept(Chain chain) throws IOException { 
        Request request = chain.request(); 
        request = request.newBuilder().url(request.url().toString().concat(".json")).build(); 
        return chain.proceed(request); 
       } 
      }) 
      .build(); 

答えて

1

は私が/api/method?page=1.json

理由のようなエンドポイントを作成します。 .jsonがなければ、それはよりよく見え、何らかの形で応答がjsonオブジェクトであることを隠すことになります。

but the problem is queries will be inserted at the end just like /api/method.json?page=1. 

これは正常な動作です。あなたが見たように、パラメータとして提供しているものを追加します。だから、

Call<Void> method(@Query("page") String page); 

Call<Void> method(@Query("page") int page); 

から変更することができ、その後、あなたは単に

method(String.valueOf(page).concat(".json")); 
+0

これは私が考える醜い解決策です。私がこれをやっている理由は、結果をJSONとして返すCakePHPが原因です。別の解決策がありますか?コールバックの内部を使用する前にURLを変更することは可能ですか? – Alireza

+0

あなたはインターセプターを使うことができますが、私はそれを避けてシンプルにしていきます。 – Blackbelt

+0

この場合、インターセプターを私に教えてもらえますか? – Alireza

0

@GET("method?page={page}.json") 
Call<Void> method(@Path("page") int page); 
+0

これは役に立ちますが、それは醜い解決策です。 '@ Query'を使う必要があります。 – Alireza

0

のようにそれを呼び出す

@GET("method.json") 
Call<Void> method(@Query("page") String page); 

のように変更しようとする方法のように値を渡します( "1.json")

関連する問題