如何在改造体

时间:2017-01-10 07:34:16

标签: android arrays json retrofit pojo

我想在Retrofit体内传递没有名字的Json数组,但是我得到400错误。我想通过pojo传递这个没有名字的json数组.Below是我要传递的json数组。我也是使用PATCH方法。

[{
"op": "replace",
"path": "/billing_address/line1",
"value": "some other value"}]

我正在使用以下方法,在这个方法中,我在logcat中得到了我想要的列表相同的响应但是在getAuthentionToken中传递后我得到400错误。

        Call<JSONResponse> getAuthentionToken(@Body List obj);


    JSONObject jobj = new JSONObject();
    jobj.put("op","replace");
    jobj.put("path","/billing_address/line1");
    jobj.put("value","some other value");


    List arrlist = new ArrayList();
    arrlist.add(jobj);


    apiInterface.getAuthentionToken(arrlist).enqueue(new Callback<JSONResponse>() {

2 个答案:

答案 0 :(得分:1)

如果您要通过请求正文发送数据,您的实现应该是这样的:

  1. 根据字段定义模型(CaseSensitive“Name” - &gt; String Name等)
  2. 设置你的api功能
  3. @POST("/api/geo/getLoc") public void getFriendsLocation(@Body YourClass classObject, Callback<JsonElement> response);

    1. 直接在帖子请求中使用您创建的类对象

      getFriendsLocation(yourClassObjectThatIncludesFields, new Callback .... );

    2. 如果您通过params发送数据您可以使用Gson执行此操作 1.假设您有一个类,其中包含id,number和FriendNumber等字段。定义函数:

      public static Map<String, Object> getMapFromObject(Object o) {
          Gson gson = new Gson();
          Type stringObjectMap = new TypeToken<Map<String, Object>>() {
           }.getType();
          return gson.fromJson(gson.toJson(o), stringObjectMap);
      }
      

      2。设置你的api功能也是那样

      @POST("/api/geo/getLoc")
      public void getFriendsLocation(@QueryMap Map<String, Object>,     Callback<JsonElement> response);
      
      1. 当您从字段发送帖子请求时,创建对象会调用此函数,如下所示

        getFriendsLocation(getMapFromObject(yourClassObjectThatIncludesFields), new Callback .... );

      2. 我没有编写包含类定义和回调函数的整个代码,因为它们取决于您的自定义。我假设你需要发送身体,所以尝试第一种方式。

答案 1 :(得分:0)

以下是对我的正确答案及其正常工作。

公共类CardUpdate {

public String op;
public String path;
public String value;

public CardUpdate(String op, String path, String value) {

    this.op = op;
    this.path = path;
    this.value = value;
}

public String getOp() {
    return op;
}

public void setOp(String op) {
    this.op = op;
}

public String getPath() {
    return path;
}

public void setPath(String path) {
    this.path = path;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

@Override
public String toString() {
    /*return "CardUpdate{" +
            "op='" + op + '\'' +
            ", path='" + path + '\'' +
            ", value='" + value + '\'' +
            '}';*/

    return "{" +'"'+
            "op"  + '"'+":" +'"' +op + '"'+
            "," + '"'+"path"  + '"'+":" + '"'+ path  + '"'+
            "," + '"'+"value" + '"'+":" + '"'+ value  + '"'+
            '}';
}

}

    CardUpdate updatt = new CardUpdate("replace","/billing_address/line1","some other value");
    List<CardUpdate> cardddd = new ArrayList<CardUpdate>();
    cardddd.add(updatt);