ジャクソンのJson Child ObjectプロパティをJavaオブジェクトフィールドにバインドする
-
11-10-2019 - |
質問
私は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")
, 、しかし、それはそのように機能しません。
解決
これは完璧ではありませんが、私が理解できる最もエレガントな方法です。
@JsonProperty("foo")
public void setFoo(Map<String, Object> foo) {
bar = (Integer) foo.get("bar");
}
他のヒント
これには自動化された機能はありません(私が知っている限り)が、これは多少要求される機能です。この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<String, Object> function) {
name = (String) function.get("name");
}
}
それはリンゴをオレンジに結合するようなものです!もう1つの「キャッチーなフレーズ」は、「インピーダンスミスマッチ」、またはスタートレック1、「非隔者!」になります。一致したオブジェクトにバインドしてから、さまざまな種類のオブジェクト間でJavaで新しい割り当てを行います。
所属していません StackOverflow