【发布时间】:2019-11-17 09:21:29
【问题描述】:
我想用case类来替换json4s中的原始类型,因为我想把业务方法放在这些case类中。
例如:
import org.json4s.{CustomSerializer, DefaultFormats, NoTypeHints}
import org.json4s.JsonAST.{JField, JInt, JObject}
import org.json4s.jackson.Serialization
import org.json4s.jackson.Serialization.read
object Json4sExercise {
trait ObjectHolder[T] {
}
case class IntValue(v: Int) extends ObjectHolder[Int]
case class StringValue(v: String) extends ObjectHolder[String]
class IntSerializer extends CustomSerializer[IntValue](format => ( {
case JInt(x) => IntValue(x.toInt)
}, {
case IntValue(x) => JInt(BigInt(x))
}
))
implicit val formats = Serialization.formats(NoTypeHints) + new IntSerializer
def main(args: Array[String]): Unit = {
println(read[Map[String, _]](""" {"price":350} """))
}
}
但不是我想要的:Map(price -> IntValue(x:350)),而是打印 Map(price -> 350)
【问题讨论】:
-
注意:Json4s has not fixed security vulnerabilities 允许对接受不可信输入的系统进行 DoS/DoW 攻击。