Отличный вопрос, я даже не подозревал, что это может вызвать столько проблем. Решение, которое я собираюсь предложить, вероятно, не самое чистое, но оно выполняет свою работу ... Прежде всего, вам не нужно расширять DefaultJsonProtocol
, вы также можете импортировать его члены:
object Foo {
import DefaultJsonProtocol._
implicit val roundedBigDecimalProtocol: JsonFormat[BigDecimal] = ...
implicit val fooFormatter = jsonFormat1(this.apply)
}
Это не решает проблему, но таким образом вы можете исключить некоторые элементы, чтобы они не были импортированы. Вот синтаксис для этого
import DefaultJsonProtocol.{BigDecimalJsonFormat => _, _}
Он в основном говорит: не импортируйте BigDecimalJsonFormat
, а импортируйте остальное.
И следующий код суммирует это.
import spray.json._
import scala.math.BigDecimal.RoundingMode
case class Foo(i: BigDecimal)
object Foo {
import DefaultJsonProtocol.{BigDecimalJsonFormat => _, _}
implicit val roundedBigDecimalProtocol: JsonFormat[BigDecimal] =
new JsonFormat[BigDecimal] {
def write(f: BigDecimal) = JsNumber(f.setScale(2, RoundingMode.HALF_UP))
def read(json: JsValue): BigDecimal =
DefaultJsonProtocol.BigDecimalJsonFormat.read(json)
}
implicit val fooFormatter = jsonFormat1(this.apply)
}