簡體   English   中英

JAVA-處理針對Content-Type的HttpClient請求:application / json

[英]JAVA - Process HttpClient request for Content-Type: application/json

希望每個人都做得很好。

問題 :每次通過POST請求調用api進行登錄時,都會得到以下響應

[status] => 415
[error] => Unsupported Media Type
[message] => Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

這是我的Yii2應用程序端代碼:

$url = ['auth/login'];
$data = ['email'=>$email, 'password'=>$password];

$response = \Yii::$app->apiclient->createRequest()
    ->setMethod('post')

    ->setUrl($url)

    ->addHeaders(['Accept-Charset' => 'UTF-8'])
    ->addHeaders(['Accept' => 'application/json'])
    ->addHeaders(['Content-Type' => 'application/json'])
    ->addHeaders(['Accept-Language' => \app\helpers\Helper::getUserLanguage()])

    ->setData($data)

    ->send();

return $response;

這是我的apiclient設置在組件部分下的web.conf文件中

'apiclient' => [
            'class' => 'yii\httpclient\Client',
            'baseUrl' => 'http://myserverName:8000',
        ],

這是我的Spring(JAVA)API端代碼:

@RequestMapping(value = "/auth/login", method = RequestMethod.POST)
public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest) {}

目標 :如果登錄憑據(電子郵件和密碼)正確,我想從api獲取用戶數據。 甚至會出現驗證錯誤消息

上下文 :我正在使用Yii2框架作為我的應用程序(前端),並使用Spring(JAVA)作為我的后端(API)

旁注 :有趣的事實是,我什至沒有嘗試使用內容類型application/x-www-form-urlencode正如您在Yii2代碼中看到的那樣,但是我仍然得到問題中提到的響應。

另一個有趣的事實是,當我在郵遞員中調用相同的API時,我沒有收到任何錯誤,並且我的響應完全正確。

任何幫助表示贊賞。

將此添加到您的請求:

-> setFormat(\\ yii \\ httpclient \\ Client :: FORMAT_JSON)

嘗試這個 :

@RequestMapping(value = "/auth/login", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest, BindingResult bindingResult) {}

這可能對您有幫助。

謝謝 :)

問題出在我發送給api的請求上。

這是我需要做的

$response = \Yii::$app->apiclient->createRequest()
            ->setMethod('POST')
            ->setUrl($url)
            ->setData($data)
            ->setFormat(\yii\httpclient\Client::FORMAT_JSON)

            ->addHeaders(['accept-charset' => 'utf-8'])
            ->addHeaders(['accept' => 'application/json'])
            ->addHeaders(['content-type' => 'application/json'])
            ->addHeaders(['accept-language' => \app\helpers\Helper::getUserLanguage()])

            ->send();

我添加了以下行,它的工作原理

->setFormat(\yii\httpclient\Client::FORMAT_JSON)

注意事項

我不知道它如何工作以及為什么起作用,但這可能是因為PHP是一種松散類型的語言,而JAVA是相反的。 Java會要求發送所有次要細節以處理請求。

暫無
暫無

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

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