我想在清单和我的序列化对象的JSON表示中添加一些信息。但是,我不想处理所有的微妙情况和迁移,akka.serialization.jackson.JacksonJsonSerializer
已经很好地处理了这些情况和迁移。
这就是为什么我想从我自己的序列化器中获取对JacksonJsonSerializer
的引用,这样我就可以轻松地修饰输出,而不必重新实现所有内容。
我尝试从他的FQN中检索序列化器:
private lazy val jackson = {
SerializationExtension(system)
.serializerOf("akka.serialization.jackson.JacksonJsonSerializer")
.map(_.asInstanceOf[SerializerWithStringManifest])
.get
}
但是,这会引发异常:
java.lang.NoSuchMethodException:akka.serialization.jackson.JacksonJsonSerializer.()
引发此异常的原因是JacksonJsonSerializer
构造函数需要扩展的actor系统和一个String,该String应该是绑定名称。而且,当绑定名为空时,方法akka.serialization.Serialization#serializerOf
(应该使用该构造函数)会重新抛出异常。不幸的是,我无法传递绑定名称。
所以我的问题是
我可以从ExtendedSystem
或akka.serialization.Serializer
可用的任何其他方式获取现有的串行化器吗?
谢谢
1条答案
按热度按时间vjrehmav1#
您可以通过以下方式访问
JacksonJsonSerializer
示例:1.可以使用Serialization.serializer来传递绑定的类作为参数。Akka将查找相应的序列化器,并返回
JacksonJsonSerializer
示例(如果已配置)。1.使用
ExtendedSystem
和绑定名称自行构建。但是要注意,应该在配置的akka.actor.serialization-identifiers.{bindingName}
中为给定的绑定名称定义相应的序列化器id。1.[不推荐]使用反射机制访问
Serialization
类的私有方法serializerOf
,其中可以定义绑定名称: