ジャクソン(fasterxml.jackson 2.1.1)を使用するときに、子供のIDのみをシリアル化する組み込みの方法はありますか? Order
をRESTにPerson
参照があります)経由で送信したいのですが、personオブジェクトは非常に複雑で、サーバー側で更新できます。必要なのは主キーだけです。
または、このためにカスタムシリアライザーが必要ですか?または、他のすべてのプロパティを@JsonIgnore
する必要がありますか? Person
オブジェクトを要求するときに、Order
データが返送されないようにしますか?それが必要かどうかはまだわかりませんが、可能であればそれを制御したいと思います...
いくつかの方法があります。まず、@JsonIgnoreProperties
を使用して、子からプロパティを削除します。
public class Parent {
@JsonIgnoreProperties({"name", "description" }) // leave "id" and whatever child has
public Child child; // or use for getter or setter
}
別の可能性、Childオブジェクトが常にidとしてシリアル化される場合:
public class Child {
// use value of this property _instead_ of object
@JsonValue
public int id;
}
そしてもう1つのアプローチは@JsonIdentityInfo
を使用することです
public class Parent {
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
@JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id
public Child child; // or use for getter or setter
// if using 'PropertyGenerator', need to have id as property -- not the only choice
public int id;
}
シリアル化でも機能し、id以外のプロパティは無視されます。ただし、結果はオブジェクトとしてラップされません。
次のようなカスタムシリアライザーを作成できます。
public class ChildAsIdOnlySerializer extends StdSerializer<Child> {
// must have empty constructor
public ChildAsIdOnlySerializer() {
this(null);
}
public ChildAsIdOnlySerializer(Class<Child> t) {
super(t);
}
@Override
public void serialize(Child value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
gen.writeString(value.id);
}
次に、フィールドに@JsonSerialize
の注釈を付けて使用します。
public class Parent {
@JsonSerialize(using = ChildAsIdOnlySerializer.class)
public Child child;
}
public class Child {
public int id;
}