每次我尝试通过 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/