2010-11-16 10 views
7

Ich versuche den Json-Inhaltstyp auf httpservice einzustellen, damit der REST-Dienst die JSON-Daten zurückgibt. Wenn ich den Inhaltstyp in Fiddler hinzufüge, funktioniert alles gut, also liegt das Problem in der Flex-Anwendung, nicht im Web-Service. Aber der Code unten funktioniert nicht und ich bekomme die XML-Daten statt JSON.Setze JSON content-type auf s: HttpService in flex

Kann mir jemand die Problemumgehung/Lösung zur Verfügung stellen?

mxml:

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

Action:

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

Antwort

12

Sieht aus wie ich es aussortiert haben. Der Trick ist, dass Accept-Header auf Service hinzugefügt werden sollte:

 var header:Object=new Object(); 

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

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

Ich wünschte, es könnte für jemanden hilfreich sein. Viel Glück.

9

Danke, das war sehr hilfreich für mich. Ich vereinfacht die Header-Zuordnung zu:

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

0

dachte, ich würde eine sauberere Beispiel schreiben.

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