簡體   English   中英

為什么Retrofit2使用@Field而不使用@Body進行POST請求

[英]Why Retrofit2 works with @Field and not @Body for POST requests

我不明白其中的區別,我編寫了一個示例,其中我的應用程序使用帶有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);
   }

?>

有人可以解釋有什么區別,如何解決?

@Body –將Java對象作為請求正文發送。

@Field –以表單編碼形式發送數據。 @Field參數僅適用於POST。

為了讀取php中的POST json正文,您可以使用以下代碼:

//Get the request body
$inputJSON = file_get_contents('php://input');
//Convert into array
$input = json_decode($inputJSON, TRUE);

$username = $input['username'];
$password = $input['password'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM