Json 如何将body(ByteBuffer)解码为Vapor 4中的内容?
当ResponseReceipt符合此处的内容协议时,我可以很容易地解码Vapor文档中描述的response.contentJson 如何将body(ByteBuffer)解码为Vapor 4中的内容?,json,swift,decode,vapor,Json,Swift,Decode,Vapor,当ResponseReceipt符合此处的内容协议时,我可以很容易地解码Vapor文档中描述的response.content let receipt = try? response.content.decode(ResponseReceipt.self) 但要理解如何使用Vapor的工具来解读身体的反应并不像解读ByteBuffer那么容易。如何以与Vapor类似的本机方式解码response.body?首先,重要的是要了解ByteBuffer是一种字节的集合,因此您可以从中读取字节并尝试像
let receipt = try? response.content.decode(ResponseReceipt.self)
但要理解如何使用Vapor的工具来解读身体的反应并不像解读ByteBuffer那么容易。如何以与Vapor类似的本机方式解码response.body?首先,重要的是要了解ByteBuffer是一种字节的集合,因此您可以从中读取字节并尝试像这样初始化
数据
guard let byteBuffer=req.body.data else{throw Abort(.badRequest)}
让数据=数据(缓冲区:byteBuffer)
let receive=try JSONDecoder().decode(ResponseReceipt.self,from:data)
还是像这样
guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
guard let data=byteBuffer.getData(at:0,长度:byteBuffer.readableBytes)else{throw Abort(.badRequest)}
let receive=try JSONDecoder().decode(ResponseReceipt.self,from:data)
但使用Vapor,您有两种更方便的方法来解码字节缓冲区
选择你更喜欢的一个
guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
let receive=try JSONDecoder().decode(ResponseReceipt.self,from:byteBuffer)
再来一次
guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
guard let receive=try byteBuffer.getJSONDecodable(ResponseReceipt.self,at:0,长度:byteBuffer.readableBytes)
还有一个
guard let byteBuffer=response.body.data else{throw Abort(.badRequest)}
guard let receive=try byteBuffer.getJSONDecodable(ResponseReceipt.self,解码器:JSONDecoder(),at:0,长度:byteBuffer.readableBytes)
谢谢。我希望Vapor有自己的机制,可以直接用更好的解码算法解码内容。我的意思是希望它能够将“1”解码为Bool true等,并避免在我的可解码结构中长时间手动解码初始值设定项。无论如何,您得到的是+1,因为我将通过跳过将ByteBuffer转换为Data来缩短代码)