如何使用 Retrofit2 将原始数据发送到 Python 脚本

how to send rawdata to Python Script using Retrofit2

我正在使用 POST 方法调用 python 脚本并使用 Retrofit2

application/json 格式发送数据

Python 脚本接受:

{
u'params': {
    u'login': u'admin',
    u'password': u'a',
    u'db': u'hrm_v10',
    u'base_location': u'10.42.0.149:8069'
},
u'jsonrpc': u'2.0',
u'id': 1,
u'method': u'call'
}

我发送到服务器的是:

{
"id": 1,
"jsonrpc": "2.0",
"method": "call",
"params": {
    "base_location": "10.42.0.149:8069",
    "db": "discuss_v10",
    "login": "admin",
    "password": "admin"
}
}

我想知道如何在 Android 中将 String 转换为 raw-data

这是我的代码:

AuthenticateRequest.kt

interface AuthenticateRequest {

    @Headers(
            "Content-Type: application/json"
    )
    @POST("/web/session/authenticate")
    fun authenticate(
            @Body authenticateReqBody: String
    ): Call<Authenticate>
}

MainActivity.kt

val authenticateReq = app.retrofit.create(AuthenticateRequest::class.java)
val reqBody = AuthenticateReqBody(id = 1, params = Params(
        App.host, App.login, App.password, App.database
))
val body = Gson().toJson(reqBody)
val call = authenticateReq.authenticate(body)
call.enqueue(object : Callback<Authenticate> {
    override fun onFailure(call: Call<Authenticate>, t: Throwable) {
        Log.d(TAG, "onFailure: " + t.message)
    }

    override fun onResponse(call: Call<Authenticate>, response: Response<Authenticate>) {
        if (response.isSuccessful) {
            Log.d(TAG, "onResponse: Success " + response.body())
        } else {
            Log.d(TAG, "onResponse: Failed " + response.errorBody()!!.string())
        }
    }
})

非常感谢您在这件事上的时间和帮助。

如果您使用 GSON 作为转换器工厂,只需使用这个

 @POST(Constants.URL.UPDATE_PROFILE_PIC)
    Call<ProfilePicUpdateHelper> updateProfilePic(@Body ProfilePicHelper profilePicHelper);

默认情况下object会被转换成json。不需要 headers 和 String.