#api #kotlin #retrofit
#API #kotlin #доработать
Вопрос:
Возьмите следующий JSON, который я хочу отправить в API:
{
"param1": "1",
"param2": "2",
"param3": {
"param3-1": "3-1",
"param3-2": "3-2"
}
}
И мой объект для param3:
data class param3Object(
@SerializedName("param3-1") param3_1: String,
@SerializedName("param3-2") param3_2: String
)
Возможно ли передать вышеупомянутый объект в атрибут запроса API @Field:
@FormUrlEncoded
@POST("api/something")
fun doSomething(
@Field("param1") param1: String,
@Field("param2") param2: String,
@Field("param3") param3: param3Object
): Call<MyResponse>
чтобы он представлял JSON в верхней части этого сообщения? Или мне нужно индивидуально передавать параметры как @Field? Я пытаюсь придумать способы не тратить время на шаблонную обработку.
Ответ №1:
Вы должны использовать его как REQUEST BODY
@POST("api/something")
fun createUser(@Body data: Data) : Call<MyResponse>
и определить модель
data class Data(
@SerializedName("param1") val param1: String,
@SerializedName("param2") val param2: String,
@SerializedName("param3") val param3: SubData
)
data class SubData(
@SerializedName("param3-1") val param3_1: String,
@SerializedName("param3-2") val param3_2: String
)
Редактировать
Если вы действительно хотите отправить это как formUrlEncoded, то, вероятно, простым решением будет изменить параметр3 на string и сериализовать данные перед тем, как поместить их в метод, или, что еще лучше, изменить все на один параметр и сериализовать весь объект
Комментарии:
1. Спасибо. Мне просто было интересно, поскольку я уже пробовал теги @Body и получал ошибки кодирования нескольких частей. Я на самом деле написал это, но не проверял, скептически отнесся и заменил его, лол.
2. так что просто попробуйте удалить
@FormUrlEncoded
и сделать это способом REST, отправив данные в виде тела json. Или, если вы действительно хотите это сделать, как@FormUrlEncoded
вы могли бы исправить ошибку, которую вы получили?3. Честно говоря, на мой взгляд, не лучшая идея отправлять json в формате formUrlEncoded, как правило, многие примеры показывают использование только с примитивами — строками, числами, логическими значениями
4. Я обновил свой ответ, удалив formurlencoded и указав какой-то способ сделать это с помощью этой аннотации