DBレプリケーションメカニズムを作成しています。ネットワーク経由でオブジェクトを1回送信したいだけです。オブジェクト自体をシリアル化する代わりに、UUIDを使用してオブジェクトを参照するカスタムシリアライザーを実装しました。反対側では、シリアル化されていないオブジェクトを作成するために、DBでUUIDを検索するだけです。
私が抱えている問題は、Jacksonがカスタムシリアライザーからの型IDを予期していることです。タイプIDを作成するにはどうすればよいですか?
私は次のクラスを取得しました:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="objectType")
public class Brand implements Serializable {
private String uuid;
@JsonSerialize(using = EntitySerializer.class)
private Producer producer = null;
// Omitting getters and setters
}
と
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="objectType")
public class Producer extends Entity implements Serializable {
private String uuid;
private String name;
//Omitting getters and setters.
}
Producerをシリアル化するために、次のシリアライザーを入手しました。
public class EntitySerializer extends JsonSerializer<Entity> {
@Override
public void serialize(Entity value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeString(value.getUUID());
}
}
シリアル化すると、@ JsonTypeInfoタイプIDが生成されないため、次のエラーが発生します。
com.fasterxml.jackson.databind.JsonMappingException: Type id handling not implemented for type com.fodolist.model.Producer (through reference chain: com.fodolist.server.callprocessor.SyncContainter["one"]->com.fodolist.model.Brand["producer"])
問題を解決するためのより良い方法はありますか?