使用 Retrofit 和 Kotlin 的 @POST 请求
Posted
技术标签:
【中文标题】使用 Retrofit 和 Kotlin 的 @POST 请求【英文标题】:@POST request using Retrofit and Kotlin 【发布时间】:2021-05-26 05:48:54 【问题描述】:当我尝试使用 Postman 发布时,一切正常:
发布https://trackapi.nutritionix.com/v2/natural/nutrients
标题
Content-Type : application/json
x-app-id : *******
x-app-key : *******
x-remote-user-id : 0
身体
"query":"carrot"
结果
"foods": [
"food_name": "carrot",
"brand_name": null,
"serving_qty": 1,
"serving_unit": "carrot",
"serving_weight_grams": 46,
"nf_calories": 16.1,
"nf_total_fat": 0.08, .........
但是,当我在我的应用程序中尝试这个时,我得到了空响应。 我尝试了 2 种不同的方法,但不幸的是没有结果。
第一:
@Headers(
"Content-Type: application/json",
"x-app-id: $NUTRITIONIX_APPLICATION_ID",
"x-app-key: $NUTRITIONIX_API_KEY",
"x-remote-user-id: 0",
)
@POST("v2/natural/nutrients")
suspend fun pushFoodNutrients(
@Body query: String
): Response<FoodNutrientsResponse>
第二:
@FormUrlEncoded
@Headers(
"Content-Type: application/json",
"x-app-id: $NUTRITIONIX_APPLICATION_ID",
"x-app-key: $NUTRITIONIX_API_KEY",
"x-remote-user-id: 0",
)
@POST("v2/natural/nutrients")
suspend fun pushFoodNutrientsTest(
@Field("query") query: String
): Response<FoodNutrientsResponse>
我的错误在哪里?我在互联网上搜索了一整天,但没有找到任何东西。
【问题讨论】:
【参考方案1】:所以,我找到了解决方案。
这是一个很好的,但有一个变化。
@Headers(
"Content-Type: application/json",
"x-app-id: $NUTRITIONIX_APPLICATION_ID",
"x-app-key: $NUTRITIONIX_API_KEY",
"x-remote-user-id: 0",
)
@POST("v2/natural/nutrients")
suspend fun pushFoodNutrients(
@Body postModel: PostModel // what I have changed
): Response<FoodNutrientsResponse>
我用一个字段查询创建了一个对象 PostModel,如下所示:
data class PostModel(
val query: String
)
之后一切正常。
【讨论】:
以上是关于使用 Retrofit 和 Kotlin 的 @POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
在 Kotlin 中使用 Moshi 和 Retrofit 解析具有增量对象名称的 JSON
使用 Retrofit2(kotlin) 的 CURL 请求
使用 Retrofit 处理 Kotlin 序列化 MissingFieldException