Retrofit Post 请求无效,我收到 500 错误代码(内部服务器错误)
Retrofit Post request is not working and i'm getting 500 error code (Internal server erroe)
我有 500 个内部服务器错误,每次我尝试通过 Retrofit 发送 POST 请求时。当我发送 GET 请求时,它正在为我工作。下面的代码是在科特林。
代码
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 时工作正常。我得到正确的回应我不知道我哪里做错了。
提前致谢
最好不要用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"
不开始/
Base URL: always ends with /
@Url: DO NOT start with /
更多详细信息https://inthecheesefactory.com/blog/retrofit-2.0/en“新URL解析概念”
您已尝试使用改进的 http post 请求,并且服务器以 500 错误代码响应您,并且您已尝试使用浏览器进行 http get 请求并且成功。您是否尝试过 http get request with retrofit?你检查服务器日志了吗?有没有错误?
我有 500 个内部服务器错误,每次我尝试通过 Retrofit 发送 POST 请求时。当我发送 GET 请求时,它正在为我工作。下面的代码是在科特林。
代码
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 时工作正常。我得到正确的回应我不知道我哪里做错了。
提前致谢
最好不要用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"
不开始/
Base URL: always ends with /
@Url: DO NOT start with /
更多详细信息https://inthecheesefactory.com/blog/retrofit-2.0/en“新URL解析概念”
您已尝试使用改进的 http post 请求,并且服务器以 500 错误代码响应您,并且您已尝试使用浏览器进行 http get 请求并且成功。您是否尝试过 http get request with retrofit?你检查服务器日志了吗?有没有错误?