Akka Http中的端点如下所示:
pathPrefix("somePath" / Segment) { someData =>
post {
entity(as[SMS]) { sms =>
// some code here ...
complete(StatusCodes.OK)
}
}
}
而SMS的定义是:
sealed trait Message
case class SMS(numFrom: String, message:String) extends Message
case class Email(emailFrom: String, message: String) extends Message
如果我想接收SMS
的列表,我可以执行以下操作:
type SMSList = List[SMS]
...
pathPrefix("somePath" / Segment) { someData =>
post {
entity(as[SMSList]) { listOfSMSs =>
// some code here ...
complete(StatusCodes.OK)
}
}
}
如果我想同时收到短信和电子邮件列表,该怎么办?我已经尝试过了,但它不起作用:
type MessageList = List[Message]
pathPrefix("somePath" / Segment) { someData =>
post {
entity(as[MessageList]) { listOfMessages =>
// some code here ...
complete(StatusCodes.OK)
}
}
}
是否可以接收属于同一层次结构的对象列表?
程式库:
circe = 0.13.0
heikoseeberger = 1.35.3
akka http = 10.2.3
詹森:
[
{"numForm": "123 456", "message": "sms message"},
{"emailFrom": "some@mail.com", "email message"}
]
2条答案
按热度按时间yrefmtwq1#
假设你在akka-http - spray-json中使用默认的一个json序列化库-你在组合几个json阅读器方面受到很大的限制(根据official page和源代码)。你能做的最好的事情可能是手动为
Message
编写一些格式化程序(或者只是阅读器)。我还建议你看一下
circe
库,它的代码更容易组合,也很容易与akka-http集成。更新1:(在指定确切的库之后):
有几个选项:
1.合并少量解码器
这是容易实现的,因为对
Decoder
的解码结果是Either
。1.创建自定义解码器,该解码器显式检查需要的字段-documentation。这种方法与前面的spray-json示例有点类似。
更新2: