Надеюсь, у всех все отлично.
проблема: Я получаю следующий ответ каждый раз, когда вызываю api для входа в систему через запрос POST
[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',
],
Вот мой код для Сторона API Spring (JAVA):
@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 в почтальоне, я не получаю никаких ошибок, и мой ответ в точности такой, каким должен быть.
Любая помощь приветствуется.
apiclient - это псевдоним для yii \ httpclient \ Client. Я тоже отредактировал свой вопрос с его кодом




Попробуй это :
@RequestMapping(value = "/auth/login", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest, BindingResult bindingResult) {}
Это может вам помочь ..
Спасибо :)
извини, но сейчас я проверю это в понедельник. Надеюсь это работает.
А пока ты можешь немного объяснить это, пожалуйста
проверьте эту ссылку для объяснения - dzone.com/articles/spring-31-valid-requestbody
Добавьте это в свой запрос:
-> setFormat (\ yii \ httpclient \ Client :: FORMAT_JSON)
Проблема заключалась в запросе, который я отправлял в 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 будет запрашивать отправку всех второстепенных деталей для обработки запроса.
Что это за "apiclient" компонент в вашем приложении PHP? Похоже, это заставляет неправильный заголовок типа контента для запроса.