android - 通过@Field 进行改造发布使值成为数组

标签 android django-rest-framework retrofit2

使用 Django web API 连接移动客户端,我使用 Retrofit @Field 将值发布到 API,当我使用 postman 测试时它工作得很好,但在移动客户端中使用 Retrofit POST 发布参数做了同样的事情 @字段

    @FormUrlEncoded
    @POST(Urls.API_REGISTER)
    fun register(
        @Header("Content-Type") contentType: String,
        @Field("username") userName: String,
        @Field("password") password: String,
        @Field("email") email: String
    ): Observable<JsonElement>

并将参数的值作为数组元素获取,如下所示

{'username': ['kabildev'], 'password': ['Kabil@123'], 'email': ['kapil@outlook.com']}

即使我曾尝试将 Content-Type 设置为 application/json 但没有成功,是否有任何原因为什么它会形成一个数组值,仅供引用,当从 postman 发布时它需要如下

{'username': 'kabildev', 'password': 'Kabil@123', 'email': 'kapil@outlook.com'}

最佳答案

@Field 被替换为 @Body 创建一个名为 User 的新数据类并使请求如下

@POST(Urls.API_REGISTER)
fun register(
    @Body user: User
): Observable<JsonElement>

另外别忘了去掉@FormUrlEncoded,让User模型如下

data class User(@SerializedName("username") val userName: String,
            @SerializedName("password") val password: String,
            @SerializedName("email") val email: String)

关于android - 通过@Field 进行改造发布使值成为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57447117/

相关文章:

django - 如何使用 Django REST 框架将 JWT token 存储在数据库中

android - "javax.net.ssl.SSLHandshakeException: Handshake failed"即使在添加自定义 TrustManager 和证书固定之后

android - 将响应返回为 Flowable 时不会调用 onComplete

android - 如何为 ListView 中显示的元素应用自己的排序逻辑?

java - 拒绝设置中的权限

java - 如何向 android ui 元素添加附加信息

android - Retrofit 2 不适用于 Android API 级别 17

android进程死于(adj *),什么是adj?

python - django rest 框架渲染器中的多部分边界

reactjs - 如何使用 Axios 将 CSRF Coo​​kie 从 React 发送到 Django Rest Framework