format @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" 

Также вы можете использовать Interceptor. Но это будет звонок по каждому запросу, поэтому я рекомендую вам использовать первый вариант.

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