Android:如何使用改型在所有url的末尾添加内容?

Android:如何使用改型在所有url的末尾添加内容?,android,timestamp,retrofit2,Android,Timestamp,Retrofit2,我对Web服务进行了改进。我想向所有请求url添加时间戳。我可以这样做吗: Retrofit retrofit = new Retrofit.Builder() .baseUrl(API.BASE_URL + Constants.TimeStamp + System.currentTimeMillis() + Constants.Slash) .addConverterFactory(GsonConverterFactory.create())

我对Web服务进行了改进。我想向所有请求url添加时间戳。我可以这样做吗:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API.BASE_URL + Constants.TimeStamp + System.currentTimeMillis() + Constants.Slash)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user, @Query("timestamp") long timestamp);
}

我的情况是,你应该像下面一样使用。如果你想检查这个链接


您可以这样做:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API.BASE_URL + Constants.TimeStamp + System.currentTimeMillis() + Constants.Slash)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user, @Query("timestamp") long timestamp);
}
公共接口服务{
@获取(“用户/{user}/repos”)
调用listRepos(@Path(“user”)字符串user,@Query(“timestamp”)长时间戳);
}

您的实现将向改造实例执行的所有请求添加相同的初始时间戳。这是你想要的吗

如果希望在每次调用中将当前/最新时间戳作为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()
如果您想像Yevhenii建议的那样将时间戳作为查询参数传递,请将拦截器替换为以下内容:

            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())
                }
            }