8

我正在尝试在 httpservice 上设置 json 内容类型,以使 REST 服务返回 json 数据。当我在提琴手中添加内容类型时,一切正常,所以问题出在 flex 应用程序中,而不是在 web 服务中。但是下面的代码不起作用,我得到的是 xml 数据而不是 json。

任何人都可以为我提供解决方法/解决方案吗?

xml:

<s:HTTPService id="service" method="POST" url="server.com" 
               result="loaded(event)" fault="fault(event)" 
               useProxy="false" resultFormat="text">

动作脚本:

public function loadAllSamples():void {
    service.contentType = "application/json";
    service.send('something');
}
4

3 回答 3

14

看来我已经整理好了。诀窍是应在服务上添加 Accept 标头:

       var header:Object=new Object();

        **header["Accept"] = "application/json";**

        service.contentType = "application/json";
        service.headers = header;
        service.send('{}');

我希望它对某人有帮助。祝你好运。

于 2010-11-17T10:58:09.157 回答
9

谢谢,这对我很有帮助。我将标题分配简化为:

httpService.headers = { Accept:"application/json" };

于 2011-02-08T05:56:57.627 回答
0

以为我会发布一个更干净的示例。

-------- JsonHttpService.as

package services
{
    import mx.rpc.http.HTTPService;
    import mx.rpc.http.SerializationFilter;

    public class JsonHttpService extends HTTPService
    {
        private var jsonFilter:JsonSerializationFilter = new JsonSerializationFilter();

        public function JsonHttpService(rootURL:String=null, destination:String=null)
        {
            super(rootURL, destination);
            resultFormat = "json";
        }

        override public function get serializationFilter():SerializationFilter {
            return jsonFilter;
        }
    }
}

--- JsonSerializationFilter.as

package services
{
    import mx.rpc.http.AbstractOperation;
    import mx.rpc.http.SerializationFilter;

    public class JsonSerializationFilter extends SerializationFilter
    {
        public function JsonSerializationFilter() {
            SerializationFilter.registerFilterForResultFormat("json", this);
            super();
        }

        override public function deserializeResult(operation:AbstractOperation, result:Object):Object {
            return JSON.parse(result as String);
        }

        override public function getRequestContentType(operation:AbstractOperation, obj:Object, contentType:String):String {
            return "application/json";
        }

        override public function serializeBody(operation:AbstractOperation, obj:Object):Object {
            return JSON.stringify(obj);
        }
    }
}
于 2017-03-22T15:49:14.730 回答