android - Retrofit Post 请求不起作用,我收到 500 错误代码(内部服务器错误)

标签 android kotlin retrofit2

每次我尝试通过 Retrofit 发送 POST 请求时,都会出现 500 内部服务器错误。当我发送 GET 请求时,它正在为我工​​作。下面的代码是在 Kotlin 。

代码

 val token = (activity as MainActivity).stockService.status.getTocken()
        val client =
            OkHttpClient.Builder().addInterceptor { chain ->
                val newRequest: Request = chain.request().newBuilder()
                    .addHeader("Authorization", "Bearer $token")
                    .addHeader("Content-Type", "application/json")
                    .build()
                chain.proceed(newRequest)
            }.build()
        val gson = GsonBuilder()
            .setLenient()
            .create()
        val retrofit: Retrofit = Retrofit.Builder()
            .client(client)
            .baseUrl("https://example.com")
            .addConverterFactory(ScalarsConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build()

        val service = retrofit.create(RestClient::class.java)


        val paramObject = JSONObject()
        paramObject.put("disclosed_quantity", 0)
        paramObject.put("exchange", "abd")
        paramObject.put("instrument_token", 3045)
        paramObject.put("order_tag", "test_order")
        paramObject.put("order_type", "CHECK")


        val call = service.createUser(paramObject.toString())
        call.enqueue(object : Callback<Any> {
            override fun onFailure(call: Call<Any>, t: Throwable) {
                Toast.makeText(activity, "Failed :$t", Toast.LENGTH_SHORT).show()
            }

            override fun onResponse(call: Call<Any>, response: Response<Any>) {
                Toast.makeText(
                    activity,
                    "Sucess ${response.body()},${response.code()}, ${response.errorBody()}",
                    Toast.LENGTH_SHORT
                ).show()
            }

        })

休息客户端

interface RestClient {

@POST("/api/v2/order")
fun createUser(@Body order: String): Call<Any> }

但是当我在 POSTMAN 中尝试 POST 时工作正常。我得到正确的回应我不知道我哪里做错了。

提前谢谢你

最佳答案

最好不要用JSONObject创建paramObject。像这样将这项工作委托(delegate)给 Retrofit 会容易得多:

// Create Order object
class Order(
    val disclosed_quantity: Int,
    val exchange: String,
    val instrument_token: String,
    val order_tag: String,
    val order_type: String
)

// Use it as @Body
@POST("api/v2/order")
fun createUser(@Body order: Order): Call<Any>

第二个问题可能出在您的网址 "/api/v2/order" 中。我觉得应该是"api/v2/order" 不启动/

Base URL: always ends with /

@Url: DO NOT start with /

更多详情 https://inthecheesefactory.com/blog/retrofit-2.0/en “新的 URL 解析概念”

关于android - Retrofit Post 请求不起作用,我收到 500 错误代码(内部服务器错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62396505/

相关文章:

java - 有没有办法为 Kotlin 顶级函数引用 Java 类?

java - android中cardview中的Clickable false无法工作

java - Retrofit2上传失败

java - Retrofit @Header 中的属性必须是常量

android - 我从使用 MVVM 的改造中得到了多个响应 - kotlin

android - 如何在后台使用服务下载文件?

"WHERE"附近的 Android 数据库更新 : syntax error

android - 单击并按住耳机按钮无任何 Action

java - 用于扩展另一个类的类的最终 protected 静态类

kotlin - kotlin 箭头函数式编程中的 Monad 是什么?