杰克逊映射器与scala中的通用类

Gal*_*Gal 5 serialization json scala case-class jackson

我试图序列化GeneralResponse:

case class GeneralResponse[T](succeeded: Boolean, payload: Option[T])
Run Code Online (Sandbox Code Playgroud)

有效载荷是GroupsForUserResult:

case class GroupsForUserResult(groups: Seq[UUID]).
Run Code Online (Sandbox Code Playgroud)

我正在使用mapper.readValue(response.body, classOf[GeneralResponse[GroupsForUserResult]])但不幸的是,有效载荷被序列化为a Map而不是所需的case类(GroupForUserResult).

Max*_*xim 6

由于Java Erasure - Jackson无法在运行时知道关于通用类型T的行 -

mapper.readValue(response.body, classOf[GeneralResponse[GroupsForUserResult]])
Run Code Online (Sandbox Code Playgroud)

这个问题的解决方案将是

import com.fasterxml.jackson.core.`type`.TypeReference

mapper.readValue(json, new TypeReference[GeneralResponse[GroupsForUserResult]] {})
Run Code Online (Sandbox Code Playgroud)

这样,您就可以提供TypeReference包含所有所需类型信息的实例.