Android 代码=400 "Bad Request" POST 次尝试
Android Code=400 "Bad Request" on POST attempt
我在使用 POST 方法时遇到了一些问题,错误=400,即 "bad request"。
我尽可能地简化了我的代码以使其正常工作,但 400 仍然出现。我错过了什么吗?是我这边还是服务器的问题?
代码:
FormApiInterface.kt
interface FormApiInterface {
@POST("/forms/filledForm")
fun sendTrashForm(@Body filledForm: TempFilledForm): Call<TempFilledForm>
}
MenuActivity.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)}
"similar" 个问题中的 None 个有帮助。在此先感谢您的帮助
从终点开始删除“/”:
interface FormApiInterface {
@POST("forms/filledForm")
fun sendTrashForm(@Body filledForm: TempFilledForm): Call<TempFilledForm>
}
并在你的基础末尾添加“/”url
您可以通过在onResponse方法中添加一些日志来尝试找出"bad request"的原因:
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}")
正如@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/"'
}
}
我在使用 POST 方法时遇到了一些问题,错误=400,即 "bad request"。
我尽可能地简化了我的代码以使其正常工作,但 400 仍然出现。我错过了什么吗?是我这边还是服务器的问题?
代码:
FormApiInterface.kt
interface FormApiInterface {
@POST("/forms/filledForm")
fun sendTrashForm(@Body filledForm: TempFilledForm): Call<TempFilledForm>
}
MenuActivity.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)}
"similar" 个问题中的 None 个有帮助。在此先感谢您的帮助
从终点开始删除“/”:
interface FormApiInterface {
@POST("forms/filledForm")
fun sendTrashForm(@Body filledForm: TempFilledForm): Call<TempFilledForm>
}
并在你的基础末尾添加“/”url
您可以通过在onResponse方法中添加一些日志来尝试找出"bad request"的原因:
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}")
正如@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/"'
}
}