java - 改造:使用 JSON 数组发送 POST 请求

标签 java android retrofit

我有 JsonElement jsonElement 对象,我从另一个 GET 请求中收到该对象作为响应。 jsonElement.toString(); 看起来像 JSON 数组:

[{"Id":493,"号码":"380936831127"," friend 号码":"380682140976"},{"Id":494,"号码":"380936831127"," friend 号码": “380638254108”}]

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

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

最佳答案

如果您通过请求正文发送数据,您的实现应该如下所示:

  1. 根据字段定义模型(区分大小写的“名称”-> 字符串名称等)
  2. 也这样设置你的 api 函数

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

    getFriendsLocation(yourClassObjectThatIncludesFields, new Callback .... )
    

如果您通过参数发送数据,您可以使用 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);
    
  3. 当您发送 post 请求时,从您的字段创建对象,请调用此函数,如下所示

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

我没有编写包括类定义和回调函数的完整代码,因为它们取决于您的自定义。我假设您需要发送正文,因此请尝试第一种方法。

关于java - 改造:使用 JSON 数组发送 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32787171/

相关文章:

java - 如何在 Java 中将 double (或字符串)四舍五入到小数点后两位?

java - 如何更改docker镜像或容器中的java版本?

java - AsyncTask 回调不调用

javascript - Phonegap 从 PDF 文件获取内容

java - Retrofit 2.0 删除、放置不起作用

android - retrofit 拦截器未向URL添加查询参数

android - Response.body() 在 Android 中使用 Retrofit 2.0.2 时返回具有空属性的对象

HTML 中的 Java 无法正常工作

java - 如何记录契约(Contract)最后(通过 jaxb schemagen)web 服务?

android - 如何在android中访问数据库sqlite