Установите тип содержимого JSON для s: HttpService в flex - PullRequest
7 голосов
/ 16 ноября 2010

Я пытаюсь установить тип содержимого json на httpservice, чтобы служба REST возвращала данные json. Когда я добавляю тип контента в fiddler, все работает нормально, поэтому проблема заключается в приложении Flex, а не в веб-сервисе. Но код ниже не работает, и я получаю данные XML вместо JSON.

Может ли кто-нибудь предоставить мне обходной путь / решение?

MXML:

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

ActionScript:

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

Ответы [ 3 ]

12 голосов
/ 17 ноября 2010

Похоже, я разобрался. Хитрость заключается в том, что заголовок Accept должен быть добавлен в сервис:

       var header:Object=new Object();

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

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

Хотелось бы, чтобы это кому-нибудь помогло. Удачи.

9 голосов
/ 08 февраля 2011

Спасибо, это было очень полезно для меня.Я упростил назначение заголовка до:

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

0 голосов
/ 22 марта 2017

Думал, что выложу более чистый пример.

-------- 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);
        }
    }
}
...