Scala为BigDecimal精度播放JSON

时间:2015-12-23 09:35:18

标签: scala playframework

当播放JSON返回结果时,任何人都知道如何指定BigDecimal类型的精度?

例如,如果BigDecimal值为100,那么当播放JSON返回JSON值时,如何显示为100.00?

2 个答案:

答案 0 :(得分:0)

这不是一个Play游戏。 Play Json是杰克逊的一个包装(在我看来是一个很好的包装)。

如果您尝试将此用于资金,我怀疑您这样做,请不要在序列化时间应用舍入,因为您实际上可能会损失一些钱。在您的模型中做到这一点!与钱合作是一个单独的主题。

如果这与金钱无关,您可以为该属性应用单独的翻译。

正如我所说,适用于Jackson的内容也适用于Play JSON。您可以尝试仅为该属性定义序列化程序。您应该实现自己的JsonSerializer,并使用@JsonSerialize(using = <YourSerializer>.class)注释您的属性。

答案 1 :(得分:0)

您只需要为您的对象提供writes的实现,以执行您要查找的格式化(舍入),例如:

case class Thing(a: String, b: BigDecimal)
object Thing {
    implicit val writes = new Writes[Thing] {
        def writes(t: Thing): JsObject = Json.obj(
            "a" -> t.a,
            "b" -> t.b.setScale(2, RoundingMode.HALF_UP)    // Round here
        )
    }
}

示例:

val t = Thing("some string", 10.123456789)
val j = Json.toJson(t)
println(Json.prettyPrint(j))

输出:

{
  "a" : "some string",
  "b" : 10.12
}