2

初めてのスプレーユーザーは、これに関する適切な例をどこにも見つけることができません。を含む XML API 応答を非整列化しようとしていますList[Person]

と言うcase class Person(name: String, age: Int)。アンマーシャラーは、適切な を生成する必要がありますList[Person]

スプレーにはデフォルトNodeSeqUnmarshallerがありますが、物事を適切に連鎖させる方法がわかりません。ポインタに感謝します。

4

1 に答える 1

5

アプリケーションでこの問題を解決する必要がありました。これは、あなたのケースクラスの例に基づいた、役に立つと思われるいくつかのコードです。

私のアプローチでは、ここで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))
  }
}
于 2015-02-23T23:34:22.523 に答える