Json4s忽略@JsonProperty jackson注释

5

I have this code

import com.fasterxml.jackson.annotation.JsonProperty
import org.json4s.DefaultFormats
import org.json4s.jackson.Serialization.{read, write}

object Testing extends App {
    implicit val formats = DefaultFormats
    val json =
            """
              |{
              |"1strange_field_name":"name"
              |}
            """.stripMargin
    println(read[Test](json))
}

case class Test(@JsonProperty("1strange_field_name") testName: Option[String])

它应该打印Test(Some(name)),但是它却打印了Test(None)。这是由于json4s没有使用@JsonProperty注释引起的。有没有一种方法可以配置json4s使用jackson注释?

1个回答

0
我发现解决这个问题最简单的方法是使用确切的字段名称,即使用``。
case class Test(`1strange_field_name`: Option[String])

1
不确定我是否理解为什么不直接使用1strange_field_name而不是``。这实际上并没有回答问题。整个重点是在Scala代码中使用不同的命名约定以及创建JSON本身时使用不同的命名约定。 - bashan
这是我的问题...所以我认为我理解它。 - Mikel San Vicente
1strange_field_name是Scala中无效的标识符。 - Mikel San Vicente
这个很好用:case class Test(1strange_field_name: Option[String])。它将使用 case class 属性的名称作为 JSON 字段。不需要 ``。无论如何,整个重点,正如您自己的代码中所写的那样,是要有一个与 case class 属性名称不同的 JSON 字段(使用 @JsonProperty)。 - bashan
1
请勿误解,但请不要为我解释我的问题...整个重点是能够将JSON解析成一个case类,而无需编写自定义解析器。在Scala 2.10、2.11、2.12或2.13中,“case class Test(1strange_field_name: Option[String])”无法编译通过,因此我不确定您是如何编译代码的。 - Mikel San Vicente

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接