【问题标题】:Passing JSON Body to a REST call in java将 JSON 正文传递给 java 中的 REST 调用
【发布时间】:2021-04-03 08:13:05
【问题描述】:

我在从 java 执行 post 调用时遇到问题。但是我可以从 Postman 执行相同的操作。 对于我的休息呼叫内容正文应该是这样的

{"group": "group1","users": ["Z123456","a123456","x123456"]}

为此,我创建了一个这样的 pojo:

public class GroupUserMapping {
    String group;
    ArrayList<String> users;
}

在代码中我创建了一个方法来像这样向这个 pojo 添加对象

 ArrayList<GroupUserMapping> usergroups = new ArrayList<>();
//some conditions
 GroupUserMapping groupUserMapping = new GroupUserMapping(group,users);
  usergroups.add(groupUserMapping);

现在对于所有这些对象,我需要调用其余的 API

usergroups.stream().parallel().forEach(ausergroup -> {
    try {
       CloseableHttpClient client = HttpClients.createDefault();
       HttpPost httpPost = new HttpPost(url);
       Gson gson = new Gson();
       String base64 = basicEncode();
       httpPost.addHeader("Authorization", base64);
       httpPost.setHeader("Content-type", "application/json");
       StringEntity entity = new StringEntity(gson.toJson(ausergroup.toString()));

       httpPost.setEntity(entity);
       HttpResponse response = client.execute(httpPost);
    } catch (Exception e) {
        e.printStackTrace();
    }

});

执行此操作后,我收到 400 错误代码。请帮我解决这个问题?

谢谢。

【问题讨论】:

  • 你确定你使用ausergroup.toString()
  • 是的。我正在使用 ausergroup.toString()
  • 您是否覆盖了GroupUserMappingtoString 方法?为什么要使用toString() 方法?
  • 据我在Gson doc API 中看到的,您应该能够在不调用 .toString() 的情况下通过 ausergroup
  • 是的。当我删除 tostring 方法时它起作用了。谢谢你:)

标签: java json rest post httpclient


【解决方案1】:

我将 ausergroup.toString() 更改为 ausergroup。它对我来说工作得很好。但是我现在有一个新问题。 当我每次向 pojo 添加元素时,组添加为新元素但用户列表正在更新所有组。理想情况下,每个组应该是不同的,但是在添加所有元素后,我看到所有组的用户都是相同的。我哪里做错了?

【讨论】:

  • 您正在使用并行流但未使用同步列表。尝试将您的列表包含在Collections.synchronizedList()
猜你喜欢
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2021-12-31
  • 2016-09-16
  • 1970-01-01
相关资源
最近更新 更多