2010-11-16 8 views
7

Próbuję ustawić typ zawartości json na httpservice, aby usługa REST zwróciła dane json. Kiedy dodaję typ zawartości do skrzypka, wszystko działa dobrze, więc problem leży w elastycznej aplikacji, a nie w serwisie internetowym. Ale poniższy kod nie działa i otrzymuję dane xml zamiast json.Ustaw typ zawartości JSON na s: HttpService w flex

Czy ktoś może mi zapewnić obejście/rozwiązanie?

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

Odpowiedz

12

Wygląda jak mam to załatwili. Sztuczka polega na tym, że nagłówek Akceptuj powinien zostać dodany do usługi:

 var header:Object=new Object(); 

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

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

Chciałbym, aby było to pomocne dla kogoś. Powodzenia.

9

Dzięki, bardzo mi to pomogło. I uproszczone zadanie do nagłówka:

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

0

myślałem, że pisać czystsze przykład.

-------- 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); 
     } 
    } 
} 
Powiązane problemy