如何输出发送到端点的任何JSON?

时间:2019-08-28 18:27:40

标签: vapor

我的Vapor应用程序端点之一需要能够接收任意JSON并将其输出到日志。有了日志后,我可以返回并设置Codables结构并执行典型的Vapor工作流程。

2 个答案:

答案 0 :(得分:2)

在路由处理程序中执行print("\(req)"),您会看到数据

答案 1 :(得分:0)

做到这一点需要解决Vapor应用程序通常不应对的两个问题:

  1. 在何处获取HTTP正文(以及如何对其进行解码)?
  2. 如何在普通助手的帮助下返回未来?

我找到的最简单的解决方案是从req.http.body.data获取正文,使用JSONSerialization.jsonObject(with:options)将数据转换为JSON,然后使用req.eventLoop.newSucceededFuture返回Future:

router.put("printanyjson") { req -> Future<HTTPStatus> in
    if let data = req.http.body.data {
        if let json = try? JSONSerialization.jsonObject(with: data, options: []) {
            print("\(json)")
        }
    }
    return req.eventLoop.newSucceededFuture(result: .ok)
}

注释#1:此解决方案does not work if body is streaming。我希望看到一个包含此想法的解决方案。

注释#2:还可以制作可解码任何结构的递归Codables,从而使您可以留在典型的Vapor用法之内。我希望看到一个包含此想法的解决方案。