【问题标题】:Json request POST rest-assuredJson请求POST放心
【发布时间】:2020-11-02 12:48:56
【问题描述】:

请帮助我从以下输出创建正文请求:

{
  "categories": [
    {
      "categoryId": "4654-456465-4564",
      "fields": {
        "4564654-454646-4564": "Ano",
        "4564654-454646-4561": "Super"
      }
    }
  ],
  "lastUpdate": "1231",
  "controlStructureId": "4654-456465-4564",
  "controlId": "4654-456465-4564",
  "vehicleId": "4654-456465-4564"
}

我的代码在这里,但它不正确,因为我在 * fields* 部分中有不需要的 [ ]

public void testPOST() {
        Map<String, Object> jsonBodyUsingMap = new HashMap<String, Object>();

        jsonBodyUsingMap.put("categories", Collections.singletonList(new HashMap<String, Object>() {
            {
                put("categoryId", "4654-456465-4564");
                put("fields", Arrays.asList(new HashMap<String, Object>() {{
                        put("4564654-454646-4561", "Super");
                        put("4564654-454646-4564", "Ano");
                }}
                ));
            }
        }
        ));
        jsonBodyUsingMap.put("lastUpdate", "1231");
        jsonBodyUsingMap.put("controlStructureId", "4654-456465-4564");
        jsonBodyUsingMap.put("controntrolId", "4654-456465-4564");
        jsonBodyUsingMap.put("vehicleId", "4654-456465-4564");

【问题讨论】:

  • fields 必须是 Map&lt;String, Object&gt; 而不是 Array。所以不需要Arrays.asList(...),只需使用您已经创建的HashMap。但是您可能应该使用专用的 JSON 库,例如 Jackson

标签: api rest-assured


【解决方案1】:

您可以从 * fields* 中删除 Arrays.asList() 并只保留哈希映射

public void testPOST() {
        Map<String, Object> jsonBodyUsingMap = new HashMap<String, Object>();

        jsonBodyUsingMap.put("categories", Collections.singletonList(new HashMap<String, Object>() {
            {
                put("categoryId", "4654-456465-4564");
                put("fields", new HashMap<String, Object>() {{
                        put("4564654-454646-4561", "Super");
                        put("4564654-454646-4564", "Ano");
                }}
                );
            }
        }
        ));
        jsonBodyUsingMap.put("lastUpdate", "1231");
        jsonBodyUsingMap.put("controlStructureId", "4654-456465-4564");
        jsonBodyUsingMap.put("controntrolId", "4654-456465-4564");
        jsonBodyUsingMap.put("vehicleId", "4654-456465-4564");

【讨论】:

  • @Toyota 随时
【解决方案2】:

您似乎将您的键/值对象 HashMap 包装在 Array 方法中。如果丢失,您将获得键/值而不是“括号”(无键值列表)

put("fields", new HashMap<String, Object>() {{
    put("4564654-454646-4561", "Super");
    put("4564654-454646-4564", "Ano");
}});

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多