当前位置: 首页 > 知识库问答 >
问题:

修改默认查询参数

夔修伟
2023-03-14

我有一个apikey“令牌”,它必须在每个请求中作为查询参数提供。我如何设置翻新,以便始终在请求中包含此查询参数?

我当前将内标识作为默认参数提供:

interface CompanyService {

    @GET("accounts/{id}")
    fun getCompany(
            @Path("id") id: Number,
            @Query("token") token: String = Constants.TOKEN) <---- here
            : Call<CompanyResponse>

    @GET("accounts/")
    fun getCompanies(
        @Query("id") page: String,
        @Query("limit") limit: Int,
        @Query("sort") sort: String = "id",
        @Query("token") token: String = Constants.TOKEN) <---- here
            : Call<CompanyListResponse>
}

但是由于我知道每个请求都需要相同的令牌,所以在我创建的每个请求函数中必须提供它作为默认参数,这感觉是多余的。我如何设置reverfit来用默认的查询参数修饰每个传出的请求?

这是我如何构建reverfit2实例的:

class CompanyAPI {
    companion object {
        private var retrofit: Retrofit? = null
        val client:Retrofit get() {
            if (retrofit == null) {
                retrofit=Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl(Constants.BASE_URL)
                    .build()
            }
            return retrofit!!
        }
    }
}

我认为在调用.build()之前,您应该在调用链中添加一些额外的函数调用,但查看可用的函数,我不能说我看到任何可以提供此功能的东西。

共有2个答案

韦知
2023-03-14

使用默认参数或头将拦截器添加到http客户端以下是如何添加它的示例:-

OkHttpClient.Builder httpClient =  
new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {  
@Override
public Response intercept(Chain chain)
throws IOException {
    Request original = chain.request();
    HttpUrl originalHttpUrl = original.url();

    HttpUrl url = originalHttpUrl.newBuilder()
            .addQueryParameter("apikey", "your-actual-api-key")
            .build();

    // Request customization: add request headers
    Request.Builder requestBuilder = original.newBuilder()
            .url(url);

    Request request = requestBuilder.build();
    return chain.proceed(request);
}
});

折射

端木野
2023-03-14

您需要向其添加一个拦截器&在您的构建器中传递客户端,如下所示:

retrofit=Retrofit.Builder()
    .addConverterFactory(GsonConverterFactory.create())
    .baseUrl(Constants.BASE_URL)
    .client(
        OkHttpClient.Builder()
            .addInterceptor { chain ->
                val url = chain
                    .request()
                    .url()
                    .newBuilder()
                    .addQueryParameter("token", Constants.TOKEN)
                    .build()
                chain.proceed(chain.request().newBuilder().url(url).build())
            }
            .build()
    )
    .build()
 类似资料:
  • 前面讲到,restorecon 命令可以将文件或目录恢复成默认的安全上下文,这就说明每个文件和目录都有自己的默认安全上下文,事实也是如此,为了管理的便捷,系统给所有的系统默认文件和目录都定义了默认的安全上下文。 那么,默认安全上下文该如何查询和修改呢?这就要使用  semanage 命令了。该命令的基本格式如下: [root@localhost ~]# semanage [login|user|p

  • 问题内容: 我有一个需要修改数据库表中列默认值的要求。该表已经是数据库中的现有表,并且当前该列的默认值为NULL。现在,如果将新的默认值添加到此列,如果我是正确的话,它将列的所有现有NULL更新为新的DEfault值。有没有一种方法可以不执行此操作,但仍在列上设置新的默认值。我的意思是我不想更新现有的NULL,并希望它们保留为NULL。 在这方面的任何帮助,不胜感激。谢谢 问题答案: 您对将会发生

  • 默认情况下,Tomcat配置的默认端口是8080。这就是为什么所有已部署的Web应用程序都可以通过URL访问的原因:http://localhost:8080/yourapp。如果希望应该在80端口上运行,则需要将默认端口8080更改为80,这是HTTP连接器的默认端口。 要更改此端口,请打开并找到以下内容: 更改为以下内容: 修改后,您可以使用"http://localhost/"来访问您的应用

  • 本节主要介绍关于默认存储引擎的操作。如果需要操作默认存储引擎,首先需要查看默认存储引擎。可以通过执行下面的语句来查看默认的存储引擎,具体 SQL 语句如下: SHOW VARIABLES LIKE 'default_storage_engine%'; 执行上面的 SQL 语句,其结果如图所示。 执行结果显示,InnoDB 存储引擎为默认存储引擎。 使用下面的语句可以修改数据库临时的默认存储引擎:

  • 本文向大家介绍MySQL5.7修改默认root密码,包括了MySQL5.7修改默认root密码的使用技巧和注意事项,需要的朋友参考一下 MySQL5.7 开始,增加了很多安全性的更新,老版本的用户可能会有一些不习惯。 5.7.6 版本以后,首次安装并启动MySQL数据库时,会生成一个临时密码到日志文件。如下: 临时密码为:nWoo>o0rXtr4。 使用该密码登陆数据库,但是不能进行任何操作,提示

  • 修改游戏基本设定 在已经调整了对话框的情况下,是否会觉得白底的对话框和黑底的姓名框,需要配上和原来不同的颜色和文字效果呢。 这时候就轮到Config.tjs上场了。 Config.tjs是吉里吉里/KAG的基本设定文件,包含了大量可以调整的细节。 不过Config.tjs所记录的只是一个默认设置,大部分功能也可以在后来的脚本里修改。 但对于游戏里随时都要用到的东西,例如说字体的默认颜色外观等等,直