Я попал в маршрут моего микросервиса.У меня есть общий API для общения с любым микросервисом и использования библиотеки JERKSON JSON.
import com.codahale.jerkson.Json
case class ApiResult[T](
private val content: Option[String],
private val error: Option[Throwable]
) {
def getRaw: String = this.content.getOrElse("null")
def get()(implicit m: Manifest[T]): T = {
Json.parse[T](this.content.get)
}
def either(implicit m: Manifest[T]): Either[Throwable, T] = error match {
case None => Right(get)
case Some(e) => Left(e)
}
}
Теперь у меня есть синглтон, в котором есть список методов для доступа к маршрутам другого сервиса.
object PurchasesTrait extends ApiResource {
def getData(payload: String): ApiResult[ProductPurchaseResponse] =
r[ProductPurchaseResponse](POST, Url.core + "reports/productspurchased", payload)
}
}
У меня есть два класса дел,
класс дел QualifyingProductSummary (upcCode: String, описание: Option [String], покупка: Option [Double]) класс дел ProductPurchaseResponse (qualifyingProducts: List [QualifyingProducts], count: Int)
purchaseTrait.getData(payload) will give me the ApiResult(json, Nnone)
json:
{"qualifyingProductSummary":[{"upcCode":"6410077902","description":"Mini-Wheats Original","purchase":15.2},{"upcCode":"6410044886","description":"Corn Pops","purchase":13.7},{"upcCode":"041570055830","description":"Unsweetened Vanilla Beverage ","purchase":13.5},{"upcCode":"626027087802","description":"Organic Almond Milk Original","purchase":12.5}],"totalQualifyingProducts":19}
val data = purchaseTrait.getData(payload).either
Чтобы получить данные из ApiResult при использовании любого из них,
Не удаетсяпроанализировать его в ProductPurchaseResponse из-за QualifyingProducts .Так как я могу добиться этого, используя ту же библиотеку?Я хочу, чтобы универсальный метод делал то же самое для других вложенных JSON.
Заранее спасибо.