格式@Query参数 – 改造2

我切换到使用Retrofit2,一切都很好,干净…但有一个服务调用,要求在正则表达式内查询参数(不要问我为什么,我已经要求它被改变)。

以下是我的方法:

@GET("prod/search") fun searchProducts(@Query("q") q: String?): Call<Array<Product>> 

如果我调用searchProducts("lala") ,查询将如下所示: prod/search?q=lala ,但是我需要它看起来像prod/search?q=(?i)\\Qlala\\E

有一种简单的方法来格式化查询参数来做到这一点?

想想,你只能用另一种方法。 像这样的东西:

  searchProducts(prepareParameter("lala")) fun prepareParameter(query: String) = "(?i)\\\\Q" + query + "\\\\E" 

你也可以使用拦截器。 但是在每个请求中都会调用,因此我建议您使用第一个变体。

 object : Interceptor { override fun intercept(chain: Interceptor.Chain?): Response { val original = chain!!.request() val originalUrl = original.url() if (originalUrl.encodedPath().contains("prod/search")) { val value = originalUrl.queryParameter("q") val newUrl = originalUrl.newBuilder() .setQueryParameter("q", "(?i)\\\\Q$value\\\\E") .build() val request = original.newBuilder().url(newUrl).build() return chain.proceed(request) } return chain.proceed(original) } } 

在你的改造建设者:

 val client = new OkHttpClient.Builder() .addInteceptor(yourInterceptor) .build() val retrofit = Retrofit.Builder().client(client).build()