Ошибка получения в Magento 2 Api «% fieldName - обязательное поле»?

9

Я не получаю результат (id) при использовании метода POST, используя URL-адрес rest / V1 / hello / test / 3

Снимок экрана :введите описание изображения здесь

Я перешел по этой ссылке для справки, пожалуйста, нажмите здесь

1) webapi.xml

<?xml version="1.0"?>
    <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
        <route url="/V1/hello/name/:name" method="GET">
            <service class="Inchoo\Hello\Api\HelloInterface" method="name"/>
            <resources>
                <resource ref="anonymous"/>
            </resources>
        </route>
        <route url="/V1/hello/test/:test" method="POST">
            <service class="Inchoo\Hello\Api\TestInterface" method="test"/>
            <resources>
                <resource ref="anonymous"/>
            </resources>
        </route>
    </routes>

2) TestInterface.php

<?php
namespace Inchoo\Hello\Api;

interface TestInterface
{
    /**
     * Returns greeting message to user
     *
     * @api
     * @param id $name Users id.
     * @return id Greeting message with users id.
     */
    public function test($id);
}

3) Test.php

<?php
namespace Inchoo\Hello\Model;
use Inchoo\Hello\Api\TestInterface;

class Test implements TestInterface
{
    /**
     * Returns greeting message to user
     *
     * @api
     * @param string $name Users name.
     * @return string Greeting message with users name.
     */
    public function test($id) {
        return "Hello How are you your id is:," .$id;
    }
}

4) di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Inchoo\Hello\Api\HelloInterface" type="Inchoo\Hello\Model\Hello" />
    <preference for="Inchoo\Hello\Api\TestInterface" type="Inchoo\Hello\Model\Test" />
</config>

Теперь я очистил кеш и страничный кеш, открыл приложение почтальонов и сохранил URL-адрес как http://10.0.0.33/nagarajuM2/rest/V1/hello/test/3.

но я получаю ошибку.

Пожалуйста, помогите мне.

Нагараджу К
источник
Вы отправляете POST-запрос и в том какие данные вы отправляете?
Emipro Technologies Pvt. Ltd.
На самом деле я хочу напечатать значение идентификатора, используя метод post, поэтому я использовал ту же концепцию, которой придерживался inchoo. и в URL я использую как rest / V1 / hello / name / 4
Nagaraju K
1
Для печати сначала вы должны отправить данные POST, такие как json: {"id": {}}
Emipro Technologies Pvt. Ltd.
хорошо, позвольте мне попробовать ..
Нагараджу К
Благодаря технологиям @Emipro теперь я получил результат. спасибо за помощь. prntscr.com/g0d53x
Нагараджу К

Ответы:

6

Вы отправляете POST-запрос, поэтому вам также необходимо отправить данные в POST-запросе в формате json, например:{ "id": {}}

И нужно установить Content-Type:application/jsonв заголовке http.

Emipro Technologies Pvt. Ltd.
источник
Кроме того, мы должны упомянуть «Content-Type: application / json» в разделе заголовка prntscr.com/g0d96z
Нагараджу К
6

Правильно обновите комментарии к функциям как для файла интерфейса, так и для класса, который его реализует.

interface TestInterface
{
    /**
     * Returns greeting message to user
     *
     * @param int $name
     * @return mixed
     */
    public function test($id);
}
Панкай Парик
источник
0

Я получал те же проблемы, а потом заметил, что я использую POST вместо GET , меняя его, проблемы были решены.

Рафаэль Корреа Гомес
источник