Подтвердить что ты не робот

Связывание свойства дочернего объекта JSON в поле объекта Java в Jackson

У меня есть объект JSON, скажем:

{
  "foo": {
    "bar": 1
  },
  "baz": 2
}

и я хочу связать его с объектом Java, например:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
  private int bar;
  @JsonProperty("baz")
  private int baz;
}

Как установить значение foo.bar из JSON в поле bar в объекте Foo Java?

Я пробовал аннотировать поле с помощью @JsonProperty("foo.bar"), но это не работает.

4b9b3361

Ответ 1

Это не идеально, но это самый элегантный способ, который я мог бы выяснить.

@JsonProperty("foo")
public void setFoo(Map<String, Object> foo) {
  bar = (Integer) foo.get("bar");
}

Ответ 2

Нет автоматических функций для этого (насколько я знаю), но это несколько часто запрашиваемая функция; есть эта Jira RFE: http://jira.codehaus.org/browse/JACKSON-132, которая походит на то, что вы ищете.

Ответ 3

Вот пример, который работает:

JSON:

[{"function":{"name":"Function 1"}},
 {"function":{"name":"Function 2"}}]

Java:

import java.util.Map;

import javax.xml.bind.annotation.XmlRootElement;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
@Getter
@Setter
@ToString
@JsonIgnoreProperties(ignoreUnknown = true)
public class Function {
    @JsonProperty("name")
    private String name;

    @JsonProperty("function")
    public void setFunction(Map<String, Object> function) {
      name = (String) function.get("name");
    }
}

Ответ 4

Это похоже на привязку яблока к апельсину! Другой "броской фразой" будет "Сопротивление импедансу" или в "Звездном пути 1" "Не Sequetor!". Свяжите его с объектом MATCHED, затем выполните новое назначение в Java между различными видами объектов.