这是我的案例类。
case class DecimalWrapper(money: BigDecimal, type: String)
object DecimalWrapper {
implicit val decimalWrapperMarshaller = Json.format[DecimalWrapper]
}
当试图做Json.toJson(DecimalWrapper(2,"整个销售"))时,它返回
{
"money": 2
"type": "whole sale"
}
我希望它返回的内容是 2.00 。
我无法找到一种方法来指定自定义序列化器,以便通过舍入HALF_UP始终返回2个小数点。
有人请帮忙吗?
此致 锡
答案 0 :(得分:2)
可能看起来更复杂,但如果您打算在整个应用程序中重复使用写入逻辑,那么为writes
定义单独的BigDecimal
是一个好主意。需要注意的一件事是你必须明确地使用它,你不能将其声明为隐式,因为已经为BigDecimal
定义了隐式写入。
val decimalWrites = new Writes[BigDecimal]{
def writes(o: BigDecimal): JsValue = JsString(o.setScale(2, RoundingMode.HALF_UP).toString())
}
implicit val decimalWrapperWrites: Writes[DecimalWrapper] = (
(JsPath \ "money").write[BigDecimal](decimalWrites) and
(JsPath \ "type").write[String]
)(unlift(DecimalWrapper.unapply))
答案 1 :(得分:0)
您可以手动编写您的写入。 类似的东西:
implicit val myWrites= new Writes[DecimalWrapper] {
def writes(a: DecimalWrapper): JsValue = Json.obj(
"money" -> a.money.setScale(2, RoundingMode.HALF_UP).toString(),
"type" -> a.`type`
)}