Следуя подходу в Easy JSON (un) сортировки в Scala с Джексоном , я определил 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
с помощью def
вместо val
гарантирует, что его значение всегда будет правильным. Любой обходной путь, чтобы сделать def
и Джексона совместимым?