将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进行新的赋值。