将JSON子对象属性绑定到Jackson中的Java对象字段
我有一个JSON对象,说:
{ "foo": { "bar": 1 }, "baz": 2 }
我想将它绑定到Java对象,如:
@JsonIgnoreProperties(ignoreUnknown = true) public class Foo { private int bar; @JsonProperty("baz") private int baz; }
如何将foo.bar
的值从JSON设置为Foo
Java对象中的bar
字段?
我尝试使用@JsonProperty("foo.bar")
注释该字段,但它不能像那样工作。
这并不完美,但这是我能想到的最优雅的方式。
@JsonProperty("foo") public void setFoo(Map foo) { bar = (Integer) foo.get("bar"); }
这没有自动化function(据我所知),但这是一个经常被要求的function; 有这个Jira RFE: http : //jira.codehaus.org/browse/JACKSON-132听起来像你在寻找。
这是一个有效的快速示例:
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 function) { name = (String) function.get("name"); } }
这就像把苹果绑在橙子上! 另一个“吸引人的短语”是“Impedance Mismatch”,或者是Star Trek 1,“Non Sequetor!” 将它绑定到MATCHED对象,然后在不同类型的对象之间用Java进行新的赋值。