簡體   English   中英

Retrofit 發布請求不起作用,我收到 500 錯誤代碼(內部服務器錯誤)

[英]Retrofit Post request is not working and i'm getting 500 error code (Internal server erroe)

每次嘗試通過 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 像這樣將這項工作委托給 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:總是以 / 結尾

@Url:不要以 / 開頭

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

您已嘗試使用 retrofit 發布請求 http ,並且服務器已使用 500 錯誤代碼響應您,並且您已嘗試使用 http 使用瀏覽器獲取請求並且它已經工作。 您是否嘗試過 http 使用 retrofit 獲取請求? 你檢查過服務器日志嗎? 有沒有錯誤?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM