【问题标题】:Play 2.3 JSON convert string to number and validate播放 2.3 JSON 将字符串转换为数字并验证
【发布时间】:2015-09-11 10:08:03
【问题描述】:

我有 JSON:

{"amount":"123.45"}

我想把它转换成case class Record(amount: BigDecimal)类。

自动播放读取 (Json.reads[Record]) 工作正常,直到我需要验证金额是否为 > 0.01。我写了自定义阅读:

val recordReads: Reads[Record] = (
    (JsPath \ "amount").read[String].map(x => BigDecimal(x))(min(BigDecimal("0.01")))
)(Record.apply _)

但是这个解决方案会导致编译错误Cannot prove that scala.math.BigDecimal <:< scala.math.BigDecimal => C.。如果我将BigDecimal 更改为Double 等,也是如此。

如何将字符串转换为BigDecimal 并同时进行验证?感谢您的建议!

【问题讨论】:

  • 为什么不(__ \ "amount").read[BigDecimal].filter(_ > BigDecimal(0.01))

标签: json scala validation playframework type-conversion


【解决方案1】:

定义读取的正确方法如下所示:

val recordReads: Reads[Record] = (
  (JsPath \ "amount").read[BigDecimal](
    min(BigDecimal("0.01"))
  )
).map(Record.apply _)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多