scala - 如何知道 unmarshell 是否成功
问题描述
我有一条路线,它将把传入的实体解组为一个案例类。
final case class ProducerMessage(topic: String, event: String, data: spray.json.JsObject)
object ProducerServer {
private val route: Route =
path("producer") {
post {
entity(as[ProducerMessage]) { msg =>
//complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say hello to akka-http</h1>"))
}
}
}
def create(): Future[ServerBinding] {
Http().bindAndHandle(route, getServerIp, getServerPort)
}
}
我怎么知道 unmarshell 的过程是否成功?当接收到的数据不是有效的 JSON 格式时,会发生什么?
解决方案
当你有entity(as[T])
用于as[T]
调用实例的FromRequestUnmarshaller[T]
- 然后取决于 unmarshaller 返回的结果,entity
将继续传递T
到关闭,或者如果它会失败Directive
。
如果您需要对有关拒绝的信息进行处理,则可以使用类似的方法recover
,您可以在之前调用这些方法apply
。
例如:
entity(as[ProducerMessage])
.map(Right(_): Either[Seq[Rejection], ProducerMessage])
.recover { rejections =>
provide(Left(rejections): Either[Seq[Rejection], ProducerMessage]))
} { value: Either[Seq[Rejection], ProducerMessage] =>
...
}
应该让您查看输入是否被拒绝并手动恢复/处理。
推荐阅读
- c++ - 浮点定向舍入和优化
- node.js - 回调函数值访问nodejs中的其他函数
- elasticsearch - 带有 ES 字段映射到“geo_shape”的 JanusGraph
- java - 如何从刚创建的数据库中读取 java 中的 mongo 数据?
- django - Django ManyToMany 关系的详细信息
- python - 如何合并 100 张图像以获得巨大的图像?
- batch-file - 在批处理脚本中将密码设置为永不过期?
- html - 按钮上的悬停效果不起作用 - CSS3
- google-cloud-platform - 此 BigQuery 错误消息中的“位置”编号表示什么:“(位置 14)从位置 211312420 开始”
- android - 在哪里添加工具栏和导航栏