2016-06-05 11 views
1

Ich versuche, eine API zu verwenden, in denen eine der Endpunkte wie so mehrere Anforderungen in einem einzigen POST Körper akzeptiert:Übermittle ich diesen POST-Körper richtig mit Hilfe von Retrofit?

body: 
{ 
    "<requestId>": { 
    "actionFoo": "objId" 
    }, 
    "<requestId>": { 
    "actionBar": "objId" 
    } 
} 

Die requestIds sind eindeutige Zeichenfolge, die auf der Client-Seite generiert werden. Ich erzeuge UUIDs für diese Werte. So

Ich habe versucht, Retrofit zu verwenden, um eine Api wie so definiert werden:

Zuerst habe ich definiert ein "Actioncommand" Objekt:

public class ActionCommand { 

private String actionFoo; 
private String actionBar; 

} 

und es in eine HashMap Karte zugeführt. Ich habe eine api wie folgt definiert:

@POST("/path/{someObjectId}/commands") 
Map<String,ActionResponse> sendActions(@Path("someObjectId")String objectId, @Body Map<String, ActionCommand> actionMap); 

Das Backend ist definitiv die objectId richtig bekommen, aber keine der Aktionen in der Karte. Ich bin mir nicht sicher, wie sonst sollte ich diese Parameter

Danke,

+0

versuchen Sie, ob es hilft, die Eigenschaften zu veröffentlichen. Oder gibt es einen öffentlichen Getter für sie? – zapl

Antwort

0

Meine Nachrüstung war korrekt. Das Problem war, dass ich den Header "application/json" weggelassen habe.

0

ändern pojo Klasse wie folgt zusenden:

package com.example; 

    import javax.annotation.Generated; 
    import com.google.gson.annotations.Expose; 
    import com.google.gson.annotations.SerializedName; 

    @Generated("org.jsonschema2pojo") 
    public class MyPojo { 

    @SerializedName("<requestId>") 
    @Expose 
    private RequestId requestId; 

    /** 
    * 
    * @return 
    * The requestId 
    */ 
    public RequestId getRequestId() { 
    return requestId; 
    } 

    /** 
    * 
    * @param requestId 
    * The <requestId> 
    */ 
    public void setRequestId(RequestId requestId) { 
    this.requestId = requestId; 
    } 

    } 

Ihre zweite Pojo wie dies sein wird;

package com.example; 

import javax.annotation.Generated; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

@Generated("org.jsonschema2pojo") 
public class RequestId { 

@SerializedName("actionBar") 
@Expose 
private String actionBar; 

/** 
* 
* @return 
* The actionBar 
*/ 
public String getActionBar() { 
return actionBar; 
} 

/** 
* 
* @param actionBar 
* The actionBar 
*/ 
public void setActionBar(String actionBar) { 
this.actionBar = actionBar; 
} 

} 
Verwandte Themen