У меня есть класс, который расширяет RestHelper для обслуживания элементов в XML и JSON. В настоящее время я реализую метод «serve» для возврата сущностей в xml:
object Rest extends RestHelper {
serve {
case "supplier" :: "findAll" :: _ XmlGet _
=> supplierListToXml(Supplier.findAll)
}
def supplierListToXml(suppliers : List[Supplier]) = {
<suppliers>{suppliers.mapConserve(f=> f.toXml)}</suppliers>
}
}
Я хочу обслуживать те же элементы, что и json, в зависимости от заголовка Accept, используя метод serveJx (объяснено в http://www.assembla.com/wiki/show/liftweb/REST_Web_Services).
Класс Supplier реализует Convertable, а я реализовал метод преобразования в классе Rest:
object RestApi extends RestHelper {
implicit def cvt: JxCvtPF[Convertable] = {
case (JsonSelect, c, _) => c.toJson
case (XmlSelect, c, _) => c.toXml
}
serveJx {
case Get("2.0" :: "supplier" :: "head" :: _,_)
=> Full(Supplier.findAll.head)
}
}
... и это работает, когда я работаю на одного поставщика. Но когда я хочу вернуть список поставщиков (List [Supplier]), метод преобразования не может быть применен.
case Get("2.0" :: "supplier" :: "findAll" :: _,_)
=> Full(Supplier.findAll.toList)
... и я получаю ошибку компиляции:
"не удалось найти неявное значение для
параметр
CVT: com.mycompany.api.RestApi.JxCvtPF [ScalaObject] "
Может кто-нибудь дать мне пример того, как изменить cvt-метод, чтобы иметь возможность преобразовывать список конвертируемых файлов в LiftResponse?
Ура!
/ J * * один тысяча двадцать-шесть