我的Vapor应用程序端点之一需要能够接收任意JSON并将其输出到日志。有了日志后,我可以返回并设置Codables结构并执行典型的Vapor工作流程。
答案 0 :(得分:2)
在路由处理程序中执行print("\(req)")
,您会看到数据
答案 1 :(得分:0)
做到这一点需要解决Vapor应用程序通常不应对的两个问题:
我找到的最简单的解决方案是从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用法之内。我希望看到一个包含此想法的解决方案。