2016-06-22 2 views
0

/api/method?page=1.json과 같은 종점을 생성하고 싶지만 /api/method.json?page=1과 같은 끝에 쿼리가 삽입됩니다. 내가 대답 @BlackbeltRetrofit - 쿼리가 삽입 된 후 종점 끝에 텍스트 추가

// 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(); 

업데이트/에 따라 작동하지만이 최고입니다. 당신은 같은 것을 사용할 수 있습니다

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")