json - 杰克逊不序列化由`def`定义的字段
问题描述
按照Easy JSON (un) marshalling in Scala with Jackson 中的方法,我定义了一个JsonUtil
类:
import com.fasterxml.jackson.databind.{DeserializationFeature, JsonNode, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
object JsonUtil {
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.enable(DeserializationFeature.USE_LONG_FOR_INTS)
def toJsonNode[T](elem: T): JsonNode = mapper.valueToTree(elem)
}
现在我想序列化一个包含一个Int
和另一个Int
具有双倍值的类:
import JsonUtil.toJsonNode
trait X {
def x: Int
def doubleX: Int = x * 2
}
case class Three() extends X {
val x = 3
}
println(toJsonNode(Three()))
// {"x":3}
println(Three().doubleX)
// 6
我意识到杰克逊可能无法识别由def
. 但是,定义doubleX
bydef
而不是val
确保其值始终正确。任何解决方法可以使def
和杰克逊兼容?
解决方案
def
没有定义字段,它是一种方法。只需注释def
with @JsonProperty
,杰克逊应该将其视为“逻辑属性”的吸气剂。
推荐阅读
- html - 使用 flexbox,如何覆盖图像并展开以填充父容器
- flutter - 如何在扩展的 Flutter 列表中指定元素的宽度?
- spring-boot - Docker 多阶段构建未运行所有阶段
- php - 如何在 FPDF 上添加自定义纸张尺寸?
- go - 在 Goroutine 中更新值
- reactjs - 如何使用已在自定义挂钩中更新的状态更新父组件?
- c - 尝试从 C 中的结构将多行写入文件
- python - os.getenv() 总是返回 None
- python - 显示 -h 时的 argparse 自定义“可选参数描述”
- node.js - 如何从节点 API 访问私有 Git 存储库中的 JSON 文件