改造:使用JSON阵列发送POST请求

时间:2015-09-25 16:58:13

标签: java android retrofit

我收到的JsonElement jsonElement对象是我另一个GET请求的回复。 jsonElement.toString();  看起来像JSON数组:

[{"Id":493,"Number":"380936831127","FriendNumber":"380682140976"},{"Id":494,"Number":"380936831127","FriendNumber":"380638254108"}]

我需要使用Retrofit通过另一个POST请求发送此字符串。如何通过POST请求发送jsonElement或String对象? 怎么看我的方法声明? 例如:

 @POST("/api/geo/getLoc")
    public void getFriendsLocation(/* something */,  Callback<JsonElement> response);

1 个答案:

答案 0 :(得分:2)

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

  1. 根据字段定义模型(CaseSensitive“Name” - &gt; String Name等)
  2. 设置你的api功能

    @POST("/api/geo/getLoc")
    public void getFriendsLocation(@Body YourClass classObject,   Callback<JsonElement> response);
    
  3. 直接在帖子请求中使用您创建的类对象

    getFriendsLocation(yourClassObjectThatIncludesFields, new Callback .... )
    
  4. 如果您通过params发送数据您可以使用Gson执行此操作。

    1. 假设您有一个类,其中包含id,number和FriendNumber.Define等字段:

      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);
      
    3. 当您从字段发送帖子请求时,创建对象会调用此函数,如下所示

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