由于文档还没有准备好,我会在这里询问 akka 维护人员。
为什么 akka-httpUnmarshaler
返回Future[T]
而不是T
?这是我的目标。我想从 XML http 响应中解组类,类似于它对 json 的处理方式。例如我想写
Unmarshal(HttpResponse.entity).to[Person]
案例类及其解组器看起来像这样
case class Person(name: String, age: Int)
implicit val personUnmarshaller = Unmarshaller[NodeSeq, Person] { _ => xml =>
Future(Person((xml \\ "name").text, (xml \\ "age").text.toInt))
}
它不会ScalaXmlSupport
与 1.0-RC4 一起编译,因为Unmarshaller[ResponseEntity,Person]
在范围内不可用。所以为了欺骗它,我写了两个隐式转换
implicit def xmlUnmarshallerConverter[T](marsh: Unmarshaller[NodeSeq, T])(implicit mat: Materializer): FromEntityUnmarshaller[T] =
xmlUnmarshaller(marsh, mat)
implicit def xmlUnmarshaller[T](implicit marsh: Unmarshaller[NodeSeq, T], mat: Materializer): FromEntityUnmarshaller[T] =
defaultNodeSeqUnmarshaller.map(Unmarshal(_).to[T].value.get.get)
它有效,但我不喜欢丑陋.value.get.get
的。有没有更优雅的方法来实现这个?