【问题标题】:Retrofit Post request is not working and i'm getting 500 error code (Internal server erroe)Retrofit Post 请求不起作用,我收到 500 错误代码(内部服务器错误)
【发布时间】:2020-06-16 06:53:20
【问题描述】:

每次我尝试通过 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()
            }

        })

RestClient

interface RestClient {

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

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

提前谢谢你

【问题讨论】:

    标签: android kotlin retrofit2


    【解决方案1】:

    最好不要用JSONObject 创建paramObject。像这样将这项工作委托给 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>
    

    第二个问题可能在您的 URL "/api/v2/order" 中。我认为应该是"api/v2/order"而不启动/

    基本网址:总是以 / 结尾

    @Url:不要以 / 开头

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

    【讨论】:

      【解决方案2】:

      您已经尝试使用改造的 http post 请求,并且服务器已以 500 错误代码响应您,并且您已尝试使用浏览器进行 http get 请求并且它已经工作了。您是否尝试过使用改造的 http get 请求?你检查过服务器日志吗?有错误吗?

      【讨论】:

      • 嗨,我尝试通过改造获取请求并且它工作,但没有发布...我无权访问服务器日志...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多