我正在使用杰克逊在 scala 中编写一个 kafka json 反序列化器,但是在为杰克逊的readValue()
方法提供泛型类型的类时遇到问题。例如:
...
import org.apache.kafka.common.serialization.Deserializer
class JsonDeserializer[T] extends Deserializer[Option[T]] {
val mapper = (new ObjectMapper() with ScalaObjectMapper)
.registerModule(DefaultScalaModule)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.registerModule(new JavaTimeModule())
.findAndRegisterModules()
.asInstanceOf[ObjectMapper with ScalaObjectMapper]
def deserialize(topic: String, bytes: Array[Byte]): Option[T] = {
Option(bytes) match {
case Some(b) => Some(mapper.readValue(bytes, classOf[T]))
case None => None
}
}
def configure(configs: java.util.Map[String, _], isKey: Boolean) {}
def close(): Unit = {}
}
注意方法mapper.readValue(bytes, classOf[T])
中的deserialize
。编译失败,出现“需要类类型但找到 T”。
如何才能做到这一点?