提问人:Alex Cruise 提问时间:11/3/2023 最后编辑:Alex Cruise 更新时间:11/4/2023 访问量:38
在另一个代码库中使用基于模块的序列化,我无法控制 ObjectMapper 构造
Use module-based serialization in another codebase where I don't control ObjectMapper construction
问:
我维护着一个 Scala 库,该库在自己的主上下文中成功地使用了所有自动功能,在那里我控制了 s 的构造。jackson-module-scala
ObjectMapper
现在,我正在尝试使用相同的库作为现成代码库中的依赖项,该代码库以自己的方式构造 s,因此我无法以通常的方式引入 Scala 模块——该模块位于类路径上但未使用。ObjectMapper
是否有某种方法可以显式调用 Scala 模块提供的 ser/des 功能,例如使用注释?
例如:
Scala 库
我有这样的 DTO 类:
@JsonNaming(classOf[SnakeCaseStrategy])
case class Foo(
bar: String,
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC", lenient = OptBoolean.TRUE)
timestamp: Instant,
bazId: Option[UUID]
)
这是我的 ObjectMapper:
object JSON {
val objectMapper: JsonMapper with ClassTagExtensions = JsonMapper.builder()
.addModule(DefaultScalaModule)
.addModule(new JavaTimeModule())
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS)
.build() :: ClassTagExtensions
}
它们的用法如下:
val s: String = ???
val foo: Foo = JSON.objectMapper.readValue[Foo](s)
运行时上下文
在运行时上下文中,ObjectMappers 是使用依赖注入和硬编码的混合创建的,我看不到任何自定义方法。
我希望能够做的是这样的事情,它委托给 Scala 模块
val scalaModule = ???
class ScalaModuleSerializer[T] extends JsonSerializer[T] {
override def serialize(value: T, gen: JsonGenerator, serializers: SerializerProvider): Unit = {
scalaModule.serialize(value, gen, serializers)
}
}
class FooSerializer extends ScalaModuleSerializer[Foo]
...然后以某种方式在运行时注入。FooSerializer
答: 暂无答案
评论