提问者:小点点

Retrofit 2 post请求返回500错误但postman工作良好


我在Stackoverflow上尝试了许多解决方案。但不起作用…请帮帮我…

Retrofit 2 POST请求返回500错误。但是邮递员工作得很好。但是如果我改变了Jsonobject的属性名称,效果很好。邮递员也是。详细信息如下。

我问了服务器团队,他们说没有问题。所以你能检查一下我的代码是否有问题吗?

'接口登录服务{

@POST("api/v1/login") // POST
fun requestLogin( // Input
    @Body loginData: JsonObject
): Call<LoginResponse> // Output`

'class LoginActivity: AppCompatActivity(){私有lateinit var viewBinding:ActivityLoginBind覆盖乐趣onCreate(savedInstanceState:Bundle?){pro.onCreate(savedInstanceState)viewBind=ActivityLoginBind.会膨胀(layoutInflater)setContentView(viewBind.root)

    // client
    val clientBuilder = OkHttpClient.Builder()
    val loggingInterceptor = HttpLoggingInterceptor()
    loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
    clientBuilder.addInterceptor(loggingInterceptor)
    clientBuilder.retryOnConnectionFailure(true)

    // retrofit
    val retrofit = Retrofit.Builder()
        .baseUrl("secret")
        .addConverterFactory(ScalarsConverterFactory.create())
        .addConverterFactory(GsonConverterFactory.create())
        .client(clientBuilder.build()) // client 
        .build()
    val userid =  viewBinding.idt.text.toString()
    val password = viewBinding.pwdt.text.toString()

    val login = JsonObject()
    login.addProperty("userId", userid)
    login.addProperty("password", password)
    val loginService = retrofit.create(LoginService::class.java)

    viewBinding.signinbtn.setOnClickListener {
        loginService.requestLogin(login).enqueue(object: Callback<LoginResponse>{
            override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
                if (response.isSuccessful){
                    val responseData = response.body()
                    if (responseData != null) {
                        Log.d("Retrofit","ResponseCode: ${responseData.code} Message: ${responseData.message}")

                        if (responseData.code == 1000) {
                            val intent = Intent(this@LoginActivity, CalendarActivity::class.java)
                            startActivity(intent)
                        }

                        if (responseData.code != 1000) {
                            cuDialog(viewBinding.root, responseData.message)
                        }

                        if (responseData.code == 1000 && viewBinding.auto.isChecked) {
                        }
                    }
                }
                else {
                    Log.w("Retrofit", "Response Not Successful ${response.code()}")
                }
            }

            override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
                Log.e("Retrofit","Error!",t)
                val dialog = AlertDialog.Builder(this@LoginActivity)
                dialog.setTitle("오류")
                dialog.setMessage("서버와 통신에 실패했습니다.")
                dialog.show()
            }
        })
    }`

数据类LoginResponse(val is成功:布尔,val代码:Int,val消息:字符串,val结果:ArrayList

在此处输入图像描述

在此处输入图像描述

邮差工作得很好

但更奇怪的是,如果我随机更改属性的名称,它的响应很好。下面是一个例子。

val login=JsonObject()login. addProperty("sdfsfssdfd",userid)login.addProperty("sfsfdsfsd",密码)

我改变了这部分。属性名称是随机的。

在此处输入图像描述

在AndroidStudio中,工作得很好。在这里输入图像描述当然,邮递员也工作得很好。

为什么如果属性名称是“userId”,不起作用?请帮助我…


共1个答案

匿名用户

从你这边userId和密码参数是空白的。我在你的错误截图上看到过。

尝试记录您的userId和密码。

val userid =  viewBinding.idt.text.toString() // I think issue is here
val password = viewBinding.pwdt.text.toString() // I think issue is here 
login.addProperty("userId", userid) 
login.addProperty("password", password)