我正在尝试升级到spring-boot 2.3.6。我使用的是spring-data MongoRepositories,没有直接调用MongoClient或MongoClient。
获取异常:
Caused by: org.bson.codecs.configuration.CodecConfigurationException: The uuidRepresentation has not been specified, so the UUID cannot be encoded.
at org.bson.codecs.UuidCodec.encode(UuidCodec.java:72)
at org.bson.codecs.UuidCodec.encode(UuidCodec.java:37)
at org.bson.codecs.EncoderContext.encodeWithChildContext(EncoderContext.java:91)
at org.bson.codecs.DocumentCodec.writeValue(DocumentCodec.java:198)
at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:212)
at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:154)
at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:45)
字符串
尝试自定义
@Bean
public MongoClientSettingsBuilderCustomizer mongoDBDefaultSettings() {
return builder -> {
builder.uuidRepresentation(UuidRepresentation.JAVA_LEGACY);
};
}
型
没有帮助,同样的例外。
在spring-boot 2.3.6中自定义UUID编解码器的正确方法是什么?
- 谢谢-谢谢
3条答案
按热度按时间soat7uwm1#
在Sping Boot application.properties上,只需通知:
字符串
g6ll5ycj2#
当你定义了一个普通的
MongoClient
bean时,就会发生这种情况,例如:字符串
您可以使用
MongoClientSettingsBuilderCustomizer
自定义自动配置的MongoClient
。(请注意,对于Sping Boot 的后续版本,如果使用自动配置的MongoClient
,则不需要自定义,因为默认情况下,从Spring Boot 2.4.2开始,MongoProperties
将UUID表示设置为JAVA_LEGACY
。根据doc:
自动配置的MongoClient使用MongoClientSettings创建。要微调其配置,请声明一个或多个MongoClientSettingsBuilderCustomizer bean。每一个都将通过用于构建MongoClientSettings的MongoClientSettings.Builder按顺序调用。
如果您需要自定义
MongoClient
,您可以显式设置UUID表示,例如:型
zlwx9yxi3#
对于MongoDB 4.3或更高版本,这是适合我的修复。
字符串