spring - 使用 Spring Data 将对象转换为任意对象
问题描述
我正在尝试将任意对象保存到 MongoDB 存储库。类可以是任何东西:
data class MyClass(val someValue: String)
如果我创建一个将类转换MyClass
为字符串的转换器,它会被 Spring 拾取并无缝转换:
@Bean
fun myClassToString(): Converter<MyClass, String> = Converter {
it.someValue
}
// ...
val object = MyClass("whatever")
repository.save(object) // Will be saved as a String, "whatever"
但是,如果我尝试将其转换为 DBObject(或任何其他 POJO),尽管 Spring 看到了 Converter Bean,但它不会调用它:
@Bean
fun myClassToObject(): Converter<MyClass, DBObject> = Converter {
BasicDBObject(mapOf("theValue" to it.value))
}
// ...
val object = MyClass("whatever")
repository.save(object)
// Will be saved as:
{
"someValue": "whatever"
}
// not under the field "theValue".
如果我尝试将其转换为其他任意对象,也会发生同样的情况:
fun myClassToOther(): Converter<MyClass, OtherClass>
或直接到地图:
fun myClassToMap(): Converter<MyClass, Map<String, Any>>
转换器都是在MongoCustomConversions
Bean 中创建和注册的:
@Bean
fun customMongoConversions(customConverters: List<Converter<out Any, out Any>>): MongoCustomConversions {
return MongoCustomConversions(customConverters)
}
我知道他们已经注册并转换为String
他们工作的证明。据我所知,这遵循此处显示的示例。唯一的区别是我要转换的对象不是直接@Document
的,而是子对象。换句话说,它更像是:
val object = Document(MyClass("whatever"))
repository.save(object)
我看不出这应该如何改变任何东西(编辑:它没有;Converter<Document, DBObject>
也不起作用)。
一个StdSerializer
with@JsonSerialize
也不起作用。我意识到这些琐碎的例子可以通过其他方式完成,但我正在寻找转换器的灵活性。更具体地说,我正在尝试序列化一个带有 a 的对象Class<T>
。
我是否在某处遗漏了一些注释或一些 Spring 配置?
解决方案
推荐阅读
- ios - Apple Music 歌曲播放不工作
- python - 从 SQLite 数据库中检索数据的最快方法
- python - json.decoder.JSONDecodeError:期望用双引号括起来的属性名称:第 1 行第 2 列(字符 1)
- node.js - 代理套接字 io 无法与 nginx、docker 上的节点连接
- angular - 对象扩展功能 TypeScript Angular 6
- scalatest - 使用 scalatest MustMatchers 和 Await 改进的 Scala 2.11 导致编译器错误“尝试执行类型变量的 lub/glb ?F[?T,?B]”
- python - 使用 pandas 将时间戳值分配给系列会创建一个 int
- node.js - 重新安装节点后:“找不到模块'internal/util/types'”
- c - 用 C 递归计算整数 sqrts
- angularjs - Ionic + Passport isAuthenticated() 返回 false