Scala:将 JSON 解析为一个案例 class,并使用 annotate JsonGetter 覆盖

Scala: Parse JSON into a case class with overriding with annotate JsonGetter

我有一个 JSON 我正在使用 scala Jackson 对象映射器将其传递给案例 class

    case class RequestJson( @(JsonGetter @field)("app_token")token:String,
                                            id: String,)  {
require(StringUtils.isNotBlank(id), "id argument cannot be blank")
    }

我原以为 JsonGetter 应该用 app_token 替换“token” 结果 JSON 为

{
  "app_token" : "myToken",
  "id" : "123"
}

但我得到

{
      "token" : "myToken",
      "id" : "123"
}

它将与注册 DefaultScalaModule 和 FAIL_ON_UNKNOWN_PROPERTIES 一起工作为 false。

案例Class代码片段:

import com.fasterxml.jackson.annotation.JsonGetter
import scala.annotation.meta.field

case class RequestJson(@(JsonGetter @field)("app_token") token: String, id: String) {}

映射器代码片段:

import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule

val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)

val request = RequestJson("mytoken", "123")
val str = mapper.writeValueAsString(request)
println(str)
//{"app_token":"mytoken","id":"123"}