8

RESTサービスがjsonデータを返すように、httpserviceでjsonコンテンツタイプを設定しようとしています。フィドラーにコンテンツタイプを追加すると、すべて正常に動作するため、問題はWebサービスではなくフレックスアプリケーションにあります。しかし、以下のコードは機能せず、json の代わりに xml データを取得します。

誰かが私に回避策/解決策を提供してもらえますか?

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');
}
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 に答える