2015-05-29 09:29:38 13053次浏览 5条回答 2 悬赏 12 金钱

restful 访问 接口返回的数据都是xml 在哪里修改可以返回json数据

  • 回答于 2015-05-29 09:43 举报

    真正的restful接口,客户端要什么就返回什么,服务器端的ActiveController的action只需返回数组即可。

    接口消费端(例如用curl命令测试)指定http头的Accept字段,Accept:application/json返回json格式,Accept:application/xml返回xml格式。例如:

    index   :   curl -H "Accept:application/json" http://.../api/v1/defaults
    view    :   curl -H "Accept:application/json" http://.../api/v1/defaults/1,  1为id
    create  :   curl -X POST -H "Accept:application/json" http://.../api/v1/defaults, 数据略...
    update  :   curl -X PUT -H "Accept:application/json" http://.../api/v1/defaults/1,  1为id
    delete  :   curl -X DELETE -H "Accept:application/json" http://.../api/v1/defaults/1,  1为id
    options :   curl -X OPTIONS -H "Accept:application/json" http://.../api/v1/defaults
    
  • 回答于 2015-05-29 09:44 举报

    配置 contentNegotiator 下的 formats 为 Response::FORMAT_JSON 即可
    例:

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['contentNegotiator']['formats']['application/json'] = Response::FORMAT_JSON;
        return $behaviors;
    }
    
    3 条回复
    回复于 2015-05-29 09:53 回复

    按照你的设置 没有起作用。

    回复于 2015-05-29 11:17 回复

    是在controller里设置的么?

    回复于 2015-05-29 11:47 回复

    就在controller里设置的

    class UserController extends ActiveController
    {
        public $modelClass = 'backend\models\Company';
        public function behaviors()
        {
            $behaviors = parent::behaviors();
            $behaviors['contentNegotiator']['formats']['application/json'] = Response::FORMAT_JSON;
            return $behaviors;
        }
    }
    
  • 回答于 2016-01-04 15:22 举报
    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['contentNegotiator']['formats'] = '';
        $behaviors['contentNegotiator']['formats']['application/json'] = Response::FORMAT_JSON;
        return $behaviors;
    }
    

    需要将formats先设为空

    觉得很赞
  • 回答于 2016-04-30 00:29 举报

    ---php

    public function behaviors()
    {
    	$behaviors = parent::behaviors();
    	$behaviors['contentNegotiator']['formats'] = ['application/json' => Response::FORMAT_JSON];
    	
    	return $behaviors;
    }
    
  • 回答于 2018-01-05 10:33 举报

    命名空间下加个
    use yii\web\Response;

您需要登录后才可以回答。登录 | 立即注册
长春子
见习主管

长春子

注册时间:2013-12-23
最后登录:2015-11-02
在线时长:10小时37分
  • 粉丝8
  • 金钱318
  • 威望0
  • 积分418

热门问题