2015-12-23 2 views
0

Кто-нибудь знает, как указать точность BigDecimal Тип при воспроизведении JSON возвращает результат?Scala play JSON для BigDecimal точности

Например, если значение BigDecimal равно 100, как я могу отображать как 100.00, когда воспроизведение JSON возвращает значение JSON?

ответ

0

На самом деле это не игра. Играть Json - это обертка (на мой взгляд хорошая) над Джексоном.

Если вы пытаетесь использовать это за деньги, которые, как я подозреваю, вы делаете, не применяйте округление во время сериализации, так как вы можете фактически потерять деньги. Сделайте это в своей модели! Работа с деньгами - отдельная тема.

В случае, если это не связано с деньгами, вы можете применить отдельный переводчик для этого атрибута.

Как я уже сказал, то, что касается Джексона, также применимо к Play JSON. Вы можете попытаться определить сериализатор только для этого атрибута. Вы должны реализовать свой собственный JsonSerializer и аннотировать свой атрибут с помощью @JsonSerialize(using = <YourSerializer>.class).

+0

Я использую Scala Play не Java Play, я не худая k аннотации для класса case – ttt

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 
} 
Смежные вопросы