如何使用带有Scala模块的Jackson反序列化带有嵌入式null的String数组?

时间:2015-04-19 02:24:25

标签: scala jackson jackson-modules

我有以下Scala case class

case class InteractionPersona(
    id: String,
    geo: Option[(Option[String], Option[String], Option[String])])

使用Jackson时,我序列化了一个类的实例:

val persona = InteractionPersona("123", Some((Some("canada"), None, None)))
val json = mapper.writeValueAsString(persona)

我收到以下JSON:

{"id": "123", "geo": ["canada", null, null]}

这是我的需求的完美有效表示。在反序列化期间,我收到com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of VALUE_NULL token

val actual = mapper.readValue(json, classOf[InteractionPersona])

显然,null不是可接受的String值,但由于我反序列化为Scala Option[String]null应表示为{{ 1}}值。

How to deserialize Jackson Json NULL String to Date with JsonFormat中,@ wassgren建议使用None注释使用转换器,在阅读文档后,我选择使用JsonDeserialize选项:

contentUsing

不幸的是,该代码不会引发预期的异常。尝试使用case class InteractionPersona( id: String, @JsonDeserialize(contentUsing = classOf[GeoConverter]) geo: Option[(Option[String], Option[String], Option[String])]) class GeoConverter extends JsonDeserializer[Option[(Option[String], Option[String], Option[String])]] { override def deserialize(jp: JsonParser, ctxt: DeserializationContext): Option[(Option[String], Option[String], Option[String])] = { throw new RuntimeException("tada") } } 也不会引发任何异常:

contentConverter

如何读取String对象数组并接受或转换空值?

0 个答案:

没有答案