У меня вопрос по дооснащению. Я делаю запрос к службе через POST, и мне нужно добавить заголовок и тело. Как правильно это сделать или хотя бы функционально. Я безуспешно пробовал со следующей строкой.
interface Service{
@Headers(
"Accept: application/vnd.github.v3.full+json",
"Token : {myToken}")
@POST("pet/list")
fun getPets(@Path("myToken")token: String, @Body body: TheBody): Call<PetList>
}
class TheBody(var userId: String,
var auth: String)
Могу ли я использовать в функции 2 заголовка с телом? fun getPets (@Header ("Accept") Accept: String, @Header ("Token") Token: String, @Body body: TheBody). Что-то вроде этого?
Да, для этого вы можете использовать @HeaderMap
и передать хэш-карту пары ключ, значение
Спасибо большое!
Используя интерфейс и аннотации, вы могли бы сделать что-то вроде этого
import com.google.gson.annotations.SerializedName
import io.reactivex.Single
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Path
import retrofit2.http.Query
interface MoviesApi {
@GET("/key")
fun getKey(
@Query("email") email: String)
: Single<Dto.KeyResponse>
@GET("/movies")
fun getMovies(
@Header("api-key") apiKey: String, // DEFINE HEADER HERE
@Query("page") page: Int,
@Query("sort") sort: String,
@Query("q") querySearch: String)
: Single<List<Dto.MovieResponse>>
sealed class Dto {
data class KeyResponse(
@SerializedName("key") val key: String,
@SerializedName("email") val email: String
) : Dto()
data class MovieResponse(
@SerializedName("id") val id: Int,
@SerializedName("title") val title: String,
@SerializedName("description") val description: String,
@SerializedName("image") val image: String
) : Dto()
}
}
@Path будет работать только для параметров пути. для заголовка вы можете передать токен
@Header("Token")
в fun getPets.