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"}
我有一个 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"}