在.set(“字段名称”,JsonNode)之后无法向Java JsonNode添加更多字段

时间:2017-10-03 22:11:16

标签: java json playframework

我正在使用Play.test和org.junit为Java Play Web应用程序编写测试。有些测试通过http请求调用我们的API。每当我需要在请求中包含Request Body时,我就会创建一个JsonNode。

一个这样的请求要求我包含一个数组。

代码:

JsonNode arr = Json.newArray()
                    .add("Element 1")
                    .add("Element 2")
                    .add("Element 3");
            sendNode =
                    Json.newObject()
                        .put("foo_id", "stringy string")
                        .put("name", "New foo")
                        .set("an_array", arr);

添加此数组我没有任何问题。上面的代码按原样工作;但是,如果我添加一行:

... //Same as above
sendNode = 
Json.newObject()
.put("foo_id", "stringy string")
.put("name", "New foo")
.set("an_array", arr)
.put("another_field", "value")

突然发生错误。我无法再向对象添加任何字段。

我正在寻找一种方法来实现这个所需的Json对象(HTTP Request Body):

{
  foo_id: "123abc",
  name: "thisthing",
  an_array: ["element1", "element2", "element3"],
  another_field: "fieldvalue"
}

1 个答案:

答案 0 :(得分:0)

好男孩,我觉得自己很傻。我只需要使用.putPOJO(String,Object)方法!

我在这里为任何像我一样愚蠢的人发布解决方案:

JsonNode arr = Json.newArray()
        .add("Element 1")
        .add("Element 2")
        .add("Element 3");
JsonNode sendNode = Json.newObject()
        .put("foo_id", "idString")
        .put("name", "foo's name")
        .putPOJO("array_field", arr)
        .put("another_field", "string value");

与set()方法不同,.putPOJO()方法返回正在创建的节点,以允许继续添加到节点所需的链接。