objeto - objectmapper java
Enlazar propiedad de objeto JSON hijo en el campo objeto Java en Jackson (4)
¡Es como atar una manzana a una naranja! Otra "frase pegadiza" sería "Impedance Mismatch", o en Star Trek 1, "Non Sequetor!" Enlazarlo con un objeto COINCIDIDO, luego hacer una nueva asignación en Java entre los diferentes tipos de objetos.
Tengo un objeto JSON, por ejemplo:
{
"foo": {
"bar": 1
},
"baz": 2
}
y quiero vincularlo en un objeto Java, como:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
private int bar;
@JsonProperty("baz")
private int baz;
}
¿Cómo puedo establecer el valor de foo.bar
desde JSON en el campo de la bar
en el objeto Foo
Java?
Intenté anotar el campo con @JsonProperty("foo.bar")
, pero no funciona así.
Aquí un ejemplo rápido que funciona:
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");
}
}
Esto no es perfecto, pero es la manera más elegante que pude descubrir.
@JsonProperty("foo")
public void setFoo(Map<String, Object> foo) {
bar = (Integer) foo.get("bar");
}
No hay una funcionalidad automatizada para esto (hasta donde yo sé), pero esta es una característica que a menudo se solicita; existe esta Jira RFE: http://jira.codehaus.org/browse/JACKSON-132 que suena como lo que estás buscando.