Yii2:休息 API return xml 而不是 json

Yii2 : Rest API return xml instead of json

我刚刚使用 Yii2 构建了一个应用程序作为 Flutter 应用程序的后端

所以 .. 我创建了一个 modules/api 文件夹并在其中创建了控制器,就像这样

<?php

 namespace app\modules\api\controllers;

 use yii\web\Controller;
 use yii\rest\ActiveController;


 class AdController extends ActiveController
 {
   public  $modelClass = 'app\models\Ad';
 }

它工作正常但是它 return XML

我试过 web.php

'components' => [
    'response' => [
        'format' => \yii\web\Response::FORMAT_JSON,
    ],
 ],

'request' => [
        'parsers' => [
            'application/json' => 'yii\web\JsonParser',
        ]
    ],

但它仍然returnXML

更新

当我使用

        'urlManager' => [ 
        ....
        'enableStrictParsing' => true,
         ...
         ]

它给我 未找到 (#404)

您可以尝试在控制器操作中输入:

\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON

例如:

public function actionAd()
{
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

    // return response
}

但是您应该为 serialize

添加 class
 class AdController extends ActiveController
 {
     public $modelClass = 'app\models\Ad';
     public $serializer = [
         'class' => 'yii\rest\Serializer',
         'collectionEnvelope' => 'items',
     ];
 }

首先创建一个基础控制器

并使用此配置覆盖行为方法

namespace micro\controllers;
class ActiveController extends yii\rest\ActiveController {

    public function behaviors() {
        $behaviors = parent::behaviors();
        $behaviors['contentNegotiator'] = [
            'class' => 'yii\filters\ContentNegotiator',
            'formats' => [
                'application/json' => \yii\web\Response::FORMAT_JSON,
            ]
        ];
        return $behaviors;
    }
}

而不是在你所有的项目控制器中扩展它

contentNegotiator 键负责响应格式