如何让spring boot在读取文档时使用我的mongodb编解码器

问题描述 投票:0回答:1

我正在尝试将 MongoDB 和 Spring Data Mongodb 与 ZonedDateTime 一起使用。

为此,我正在使用这些之一,

ZonedDateTimeAsDocumentCodec
。我用这一小段配置以及默认编解码器注册了它

 @Bean
    fun zonedDateTimeCodecCustomizer() = MongoClientSettingsBuilderCustomizer { clientSettingsBuilder ->
        clientSettingsBuilder.codecRegistry(
            CodecRegistries.fromRegistries(
                MongoClientSettings.getDefaultCodecRegistry(),
                CodecRegistries.fromCodecs(
                    ZonedDateTimeAsDocumentCodec()
                )
            )
        )
    }

当存储带有

ZonedDateTime
字段的对象时,它运行良好,但我尝试读取相同的对象时,出现错误:
java.lang.reflect.InaccessibleObjectException: Unable to make private java.time.ZonedDateTime(java.time.LocalDateTime,java.time.ZoneOffset,java.time.ZoneId) accessible: module java.base does not "opens java.time" to unnamed module @11bb571c

我对代码进行了一些深入研究,似乎 Spring Data 仅在尝试创建字段的持久实体后才使用编解码器,并且在这样做时,它尝试使构造函数可访问。这是行不通的,抛出异常并将所有过程都扔进垃圾箱。

关于如何使 Spring Data 直接跳转到用于 ZonedDateTime 的编解码器的任何线索?

附注:我知道我有一些解决方法来解决我的问题(Spring Converter 就是其中之一),但如果可能的话,我想坚持使用编解码器。

mongodb spring-boot spring-data-mongodb
1个回答
0
投票

使用jvm_选项

--add-opens java.base/java.time=ALL-UNNAMED
© www.soinside.com 2019 - 2024. All rights reserved.