UUID 表示为 Bson 字符串
UUID represented as Bson String
我想我确实有一个简单的用例,但我正在努力让它与 MongoDB 一起工作。
我有一个 POJO 看起来像
public class Item {
@BsonRepresentation(value = BsonType.STRING)
private UUID id;
private String version;
// more..
// getter/setters
}
您看到 POJO 的 ID 指定为 UUID。但是Bson表示是一个字符串。
我试图只为 UUID class 编写自定义编解码器,但这实际上不起作用。注册表看起来像
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(
MongoClientSettings.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().automatic(true).build()),
CodecRegistries.fromCodecs(
new UuidCodec()
)
)
我只想为 UUID 编写编解码器,而不是为整个项目编写编解码器 class。但是我认为我真的走错了方向,我需要任何帮助。应该如何实施?
感谢@fabiolimace 的输入,我实现了一个简单的 PropertyCodecProvider,其中 returns 用于 UUID 类型下面的编解码器
public class UuidCodec implements Codec<UUID> {
@Override
public void encode(BsonWriter writer, UUID value, EncoderContext encoderContext) {
if (value != null) {
writer.writeString(value.toString());
}
}
@Override
public UUID decode(BsonReader reader, DecoderContext decoderContext) {
String uuidString = reader.readString();
if (uuidString == null || uuidString.isEmpty()) {
return null;
}
return UUID.fromString(uuidString);
}
@Override
public Class<UUID> getEncoderClass() {
return UUID.class;
}
}
希望这对面临类似挑战的其他人有所帮助。
我想我确实有一个简单的用例,但我正在努力让它与 MongoDB 一起工作。
我有一个 POJO 看起来像
public class Item {
@BsonRepresentation(value = BsonType.STRING)
private UUID id;
private String version;
// more..
// getter/setters
}
您看到 POJO 的 ID 指定为 UUID。但是Bson表示是一个字符串。
我试图只为 UUID class 编写自定义编解码器,但这实际上不起作用。注册表看起来像
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(
MongoClientSettings.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().automatic(true).build()),
CodecRegistries.fromCodecs(
new UuidCodec()
)
)
我只想为 UUID 编写编解码器,而不是为整个项目编写编解码器 class。但是我认为我真的走错了方向,我需要任何帮助。应该如何实施?
感谢@fabiolimace 的输入,我实现了一个简单的 PropertyCodecProvider,其中 returns 用于 UUID 类型下面的编解码器
public class UuidCodec implements Codec<UUID> {
@Override
public void encode(BsonWriter writer, UUID value, EncoderContext encoderContext) {
if (value != null) {
writer.writeString(value.toString());
}
}
@Override
public UUID decode(BsonReader reader, DecoderContext decoderContext) {
String uuidString = reader.readString();
if (uuidString == null || uuidString.isEmpty()) {
return null;
}
return UUID.fromString(uuidString);
}
@Override
public Class<UUID> getEncoderClass() {
return UUID.class;
}
}
希望这对面临类似挑战的其他人有所帮助。