我正在制作数据库复制机制。我只想通过网络发送一个对象。我已经实现了一个自定义序列化程序,它使用 UUID 引用对象,而不是序列化对象本身。另一方面,我打算只在 DB 中查找 UUID 以创建非序列化对象。
我遇到的问题是杰克逊希望我的自定义序列化程序有一个类型 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"])
有没有更好的方法来解决这个问题?