我不明白其中的区别,我编写了一个示例,我的应用程序使用retrofit2使用POST请求向服务器发送用户名和密码。
我首先尝试在接口方法中使用@Body标签发送请求:`
@POST("/testproject/login.php")
Call<TestResponse> sendUsernamePassword(@Body UserData userData);
但是我的login.php回复时没有收到正文标签(用户名,密码)。
然后我使用FormEncoding更改方法发送请求:
@FormUrlEncoded
@POST("/testproject/login.php")
Call<TestResponse> sendUsernamePassword(@Field("username")String username,
@Field("password")String password);
它开始工作了,但我不明白为什么改装无法使用@Body注释发送帖子请求。
这是login.php
档案
<?php
if (isset($_POST['username']) && isset($_POST['password'])) {
$response['status'] = 'success';
$response['username'] = $_POST['username'] . " received";
$response['password'] = $_POST['password'] . "received";
echo json_encode($response);
} else {
$response['status'] = 'failure';
echo json_encode($response);
}
?>
有人可以解释有什么区别,如何解决?
答案 0 :(得分:5)
@Body
- 将Java对象作为请求体发送。
@Field
- 以form-urlencoded格式发送数据。 @Field参数仅适用于POST。
为了在php中读取POST json body,您可以使用以下代码:
//Get the request body
$inputJSON = file_get_contents('php://input');
//Convert into array
$input = json_decode($inputJSON, TRUE);
$username = $input['username'];
$password = $input['password'];