Невозможно добавить дополнительные поля в Java JsonNode после .set(имя поля, JsonNode)

Я пишу тесты для веб-приложения Java Play, используя Play.test и org.junit. Некоторые тесты вызывают наши API через http-запросы. Я создаю 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):

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

person Chris Siegler    schedule 03.10.2017    source источник
comment
Какую ошибку вы получаете? Я предполагаю исключение - не могли бы вы опубликовать трассировку стека?   -  person brain99    schedule 04.10.2017
comment
Ошибка: (2073, 25) java: не удается найти символ: метод put (java.lang.String, java.lang.String) местоположение: класс com.fasterxml.jackson.databind.JsonNode   -  person Chris Siegler    schedule 04.10.2017


Ответы (1)


Эй, мальчик, я чувствую себя глупо. Мне просто нужно было использовать метод .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");

Метод .putPOJO(), в отличие от метода set(), возвращает создаваемый узел, чтобы обеспечить цепочку, необходимую для продолжения добавления к узлу.

person Chris Siegler    schedule 03.10.2017