播放2.3 JSON将字符串转换为数字并进行验证

时间:2015-09-11 10:08:04

标签: json scala validation playframework type-conversion

我有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并同时验证?感谢您的想法!

1 个答案:

答案 0 :(得分:1)

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

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