Как удалить список дел в классе 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))
  }
}
Другие вопросы по тегам