我是 Retrofit 的新手,我正在尝试将 RapidApi 中的 Google Translate Api 与 Retrofit 结合使用,但我无法将 okhttp 代码片段转换为 Retrofit
这是使用 OkHttp 进行 Post 请求的示例代码片段:
val client = OkHttpClient()
val mediaType = MediaType.parse("application/x-www-form-urlencoded")
val body = RequestBody.create(mediaType, "q=Hello%2C%20world!&target=es")
val request = Request.Builder()
.url("https://google-translate1.p.rapidapi.com/language/translate/v2")
.post(body)
.addHeader("content-type", "application/x-www-form-urlencoded")
.addHeader("Accept-Encoding", "application/gzip")
.addHeader("X-RapidAPI-Host", "google-translate1.p.rapidapi.com")
.addHeader("X-RapidAPI-Key", API_KEY)
.build()
val response = client.newCall(request).execute()
我想在 android 中使用 Retrofit 提出相同的请求
这是我的api接口:
interface TranslatorApi {
@Headers(
"content-type: application/x-www-form-urlencoded",
"Accept-Encoding: application/gzip",
"X-RapidAPI-Host: google-translate1.p.rapidapi.com",
"X-RapidAPI-Key: API_KEY
)
@POST("translate/v2")
suspend fun translate(
@Body q: String,
@Query("target") target: String,
@Query("source") source: String
): Response<GoogleTranslateObject>
}
这对我有用:
interface TranslationApi {
@Headers(
"content-type: application/x-www-form-urlencoded",
"Accept-Encoding: application/gzip",
"X-RapidAPI-Key: $API_KEY",
"X-RapidAPI-Host: google-translate1.p.rapidapi.com"
)
@POST("language/translate/v2")
@FormUrlEncoded
suspend fun translateText(
@Field("q") query: String,
@Field("target") targetLang: String = "tr",
@Field("source") sourceLang: String = "en"
): Response<TranslationResponseDto>
}