Как удалить список дел в классе Spray
Пользователь Spray впервые не смог найти подходящих примеров по этому вопросу. Я пытаюсь разобрать ответ XML API, который содержит List[Person]
,
Сказать case class Person(name: String, age: Int)
, Unmarshaller должен производить соответствующие List[Person]
,
Спрей имеет значение по умолчанию NodeSeqUnmarshaller
но я не могу понять, как правильно связать вещи, был бы благодарен за любые указатели.
1 ответ
Решение
Я должен был решить эту проблему в моем приложении. Вот некоторый код, основанный на вашем примере case-класса, который может оказаться полезным.
Мой подход использует Unmarshaller.delegate
как обсуждено здесь.
import scala.xml.Node
import scala.xml.NodeSeq
import spray.httpx.unmarshalling._
import spray.httpx.unmarshalling.Unmarshaller._
case class Person(name: String, age: Int)
object Person {
def fromXml(node: Node): Person = {
// add code here to instantiate a Person from a Node
}
}
case class PersonSeq(persons: Seq[Person])
object PersonSeq {
implicit val PersonSeqUnmarshaller: Unmarshaller[PersonSeq] = Unmarshaller.delegate[NodeSeq, PersonSeq](MediaTypes.`text/xml`, MediaTypes.`application/xml`) {
// Obviously, you'll need to change this function, but it should
// give you an idea of how to proceed.
nodeSeq =>
val persons: NodeSeq = nodeSeq \ "PersonList" \ "Person"
PersonSeq(persons.map(node => Person.fromXml(node))
}
}