ジャクソンのJson Child ObjectプロパティをJavaオブジェクトフィールドにバインドする

StackOverflow https://stackoverflow.com/questions/4199794

質問

私は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で新しい割り当てを行います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top