Android代码=400 "坏的请求 "在POST尝试中

问题描述 投票:0回答:1

我的POST方法出现了一些问题,错误=400,即 "坏请求"。

我尽可能地简化了我的代码,以使其工作,但400仍然出现。我是不是遗漏了什么?是我这边的问题还是服务器的问题呢?

代码:

FormApiInterface.kt

interface FormApiInterface {
    @POST("/forms/filledForm")
    fun sendTrashForm(@Body filledForm: TempFilledForm): Call<TempFilledForm>
}

菜单活动.kt

class MenuActivity : AppCompatActivity() {
    private lateinit var apiInterface : FormApiInterface

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(activity_main)

        val apiClient = OkHttpClient().newBuilder().build()

        val retrofit = Retrofit.Builder()
            .baseUrl(URL_POST)
            .client(apiClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

        apiInterface = retrofit.create(FormApiInterface::class.java)
    }

    fun sendTrash() {
        val tempFilledForm = TempFilledForm(
            userLogin = "filledForm?.userLogin",
            formId = "filledForm?.userLogin",
            formVersion = "filledForm?.formVersion",
            formStatus = "filledForm?.formStatus",
            form = "filledForm?.formFieldsData")

        val call: Call<TempFilledForm> = apiInterface.sendTrashForm(tempFilledForm)

        call.enqueue(object : Callback<TempFilledForm> {
            override fun onFailure(call: Call<TempFilledForm>?, t: Throwable?) {
                Log.v("retrofit", "call failed")
            }

            override fun onResponse(call: Call<TempFilledForm>?, response: Response<TempFilledForm>?) {
                Log.v("retrofit", response.toString())
            }
        })
    }

我在Activity的onClick里面调用sendTrash(),响应是这样的。

V/retrofit: Response{protocol=http/1.1, code=400, message=, url=http:--------(covered it)}

"类似 "的问题都没有帮助。先谢谢你的帮助

android kotlin post retrofit retrofit2
1个回答
1
投票

正如@Shahriyar Aghajani指出的那样。尝试从你的服务中删除""。

interface FormApiInterface {
    @POST("forms/filledForm")
    fun sendTrashForm(@Body filledForm: TempFilledForm): Call<ResponseObject>
}

此外,你的服务器发送回来的对象和响应回来的一样吗?

理想情况下,响应与你的输入主体对象是不同的。

@Body filledForm: TempFilledForm

而来自后台的响应对象 Call<ResponseObject>

如果你已经在build.gradle中配置了端点,请确保你的端点以""结尾。

buildTypes {

  debug {
    buildConfigField "String", "BASE_URL", '"http://191.111.3.170:8000/sample/"'
  }

}

0
投票

从你的终点开始删除""。

interface FormApiInterface {
    @POST("forms/filledForm")
    fun sendTrashForm(@Body filledForm: TempFilledForm): Call<TempFilledForm>
}

然后在你的基本网址的结尾加上""。


0
投票

你可以尝试通过在onResponse方法中添加一些日志来找出 "坏请求 "的原因。

Log.d("TEST", " errorBody: ${response.errorBody()?.string()}") 

也许你发送了错误的参数

如果你尝试初始化 tempFilledForm 使用其他模型的变量,使用 $ 操作符用于字符串插值,并使用大括号来表达。

val tempFilledForm = TempFilledForm(
        userLogin = "${filledForm?.userLogin}",
        formId = "${filledForm?.userLogin}",
        formVersion = "${filledForm?.formVersion}",
        formStatus = "${filledForm?.formStatus}",
        form = "${filledForm?.formFieldsData}")
© www.soinside.com 2019 - 2024. All rights reserved.