在Flex中的s:HttpService上设置JSON内容类型

8
我正在尝试设置httpservice的json内容类型,以便REST服务返回json数据。当我在fiddler中添加内容类型时,一切正常,因此问题出现在flex应用程序中,而不是Web服务中。但是下面的代码不起作用,我得到的是xml数据,而不是json。
请问有人能提供解决方法吗?
mxml:
<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');
}
3个回答

14

看起来我已经解决了。诀窍是在服务端添加 Accept header:

       var header:Object=new Object();

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

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

希望这对某人有所帮助。祝好运。


10
感谢您,这对我很有帮助。我将简化头部分配为:

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


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

--- Json序列化过滤器.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);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接