如何解决如何在 Vapor 4 中将正文 (ByteBuffer) 解码为内容?
当 ResponseReceipt 符合此处的 Content 协议时,我可以轻松解码 response.content,如 Vapor 文档中所述。
let receipt = try? response.content.decode(ResponseReceipt.self)
但是要理解如何使用 Vapor 的工具解码 response.body 并不容易,因为它是 ByteBuffer。如何以与 Vapor 类似的原生方式解码 response.body?
解决方法
首先,重要的是要了解 ByteBuffer 是一种字节集合,因此您可以从中读取字节并尝试像这样初始化 Data
guard let byteBuffer = req.body.data else { throw Abort(.badRequest) }
let data = Data(buffer: byteBuffer)
let receipt = try JSONDecoder().decode(ResponseReceipt.self,from: data)
或者像这样
guard let byteBuffer = response.body.data else { throw Abort(.badRequest) }
guard let data = byteBuffer.getData(at: 0,length: byteBuffer.readableBytes) else { throw Abort(.badRequest) }
let receipt = try JSONDecoder().decode(ResponseReceipt.self,from: data)
但是使用 Vapor,您有两种更方便的方法来解码字节缓冲区
选择你更喜欢的那个
guard let byteBuffer = response.body.data else { throw Abort(.badRequest) }
let receipt = try JSONDecoder().decode(ResponseReceipt.self,from: byteBuffer)
再来一个
guard let byteBuffer = response.body.data else { throw Abort(.badRequest) }
guard let receipt = try byteBuffer.getJSONDecodable(ResponseReceipt.self,at: 0,length: byteBuffer.readableBytes)
还有一个
guard let byteBuffer = response.body.data else { throw Abort(.badRequest) }
guard let receipt = try byteBuffer.getJSONDecodable(ResponseReceipt.self,decoder: JSONDecoder(),length: byteBuffer.readableBytes)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。