Android: как добавить что-то в конец всего URL с помощью Retrofit? - PullRequest
0 голосов
/ 25 апреля 2019

Я использую модификацию для веб-сервиса. Я хочу добавить Timestamp для всех URL запроса. могу ли я сделать так:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API.BASE_URL + Constants.TimeStamp + System.currentTimeMillis() + Constants.Slash)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

Ответы [ 3 ]

0 голосов
/ 25 апреля 2019

Вы можете сделать это так:

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user, @Query("timestamp") long timestamp);
}
0 голосов
/ 28 апреля 2019

Ваша реализация добавит одну и ту же начальную метку времени ко всем запросам, выполняемым экземпляром дооснащения.Это то, что вы хотите?

Если вы хотите, чтобы текущая / последняя отметка времени была частью пути URL в каждом вызове, используйте перехватчик:

 val okHttpClient = OkHttpClient.Builder()
            .addInterceptor( object : Interceptor {
                override fun intercept(chain: Interceptor.Chain): Response {
                    val originalRequest = chain.request()
                    val originalHttpUrl = originalRequest.url()

                    val timestampUrl = originalHttpUrl.newBuilder()
                            .addPathSegment(System.currentTimeMillis().toString())
                            .build()

                    val requestBuilder = originalRequest.newBuilder()
                            .url(timestampUrl)
                    return chain.proceed(requestBuilder.build())
                }
            })
            .build()

val retrofit = Retrofit.Builder()
        .baseUrl(API.BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .client(okHttpClient)
        .build()

Если вы хотите передать отметку временив качестве параметра запроса, как предложил Евгений, замените перехватчик на что-то вроде:

            object : Interceptor {
                override fun intercept(chain: Interceptor.Chain): Response {
                    val originalRequest = chain.request()
                    val originalHttpUrl = originalRequest.url()

                    val timestampUrl = originalHttpUrl.newBuilder()
                            .addQueryParameter("timestamp", System.currentTimeMillis().toString())
                            .build()

                    val requestBuilder = originalRequest.newBuilder()
                            .url(timestampUrl)
                    return chain.proceed(requestBuilder.build())
                }
            }
0 голосов
/ 25 апреля 2019

В моем случае вы должны использовать как показано ниже. Если вы хотите проверить эту ссылку введите описание ссылки здесь

     Gson gson = new GsonBuilder()
            .setDateFormat(Constants.TimeStamp + System.currentTimeMillis() + Constants.Slash)
            .create();

       Gson gson = new GsonBuilder()
         .registerTypeAdapter(Id.class, new IdTypeAdapter())
         .enableComplexMapKeySerialization()
         .serializeNulls()
         .setDateFormat(Constants.TimeStamp + System.currentTimeMillis() + Constants.Slash)
         .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
         .setPrettyPrinting()
         .setVersion(1.0)
         .create();

Retrofit retrofit = new Retrofit.Builder()  
     .baseUrl(API.BASE_URL)
     .addConverterFactory(GsonConverterFactory.create(gson))
     .build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...