我正在使用steam的客户端来获取get请求。
func sendGetRequest(req: Request) throws -> Future<Response> {
let client = try req.make(FoundationClient.self)
return client.get("http://example.vapor.codes/json", headers: ["Accept-Language" : "ar"])
.map(to: Response.self, { clientResponse in
let response = req.makeResponse()
response.http.status = clientResponse.http.status
response.http.body = clientResponse.http.body
return response
})
}
这将返回所有json数据,我想过滤它只返回2个属性,例如在这种情况下(dict,number)
我为数据创建了一个模型
struct ExampleData: Codable {
// var array : [Int]
var dict : [String : String]
var number : Int
// var string : String
}
该函数希望我返回Future&lt;响应&gt;,但如果我将其更改为Future&lt; ExampleData&GT;并将映射设置为.map(to:ExampleData.self ..)
我得到了
无法将“Response”类型的返回表达式转换为返回类型 'TodoController.ExampleData'
答案 0 :(得分:1)
我想通了
func sendGetRequest(req: Request) throws -> Future<ExampleData> {
let client = try req.make(Client.self)
let ans = client.get("http://example.vapor.codes/json", headers: ["Accept-Language" : "ar"]).flatMap { exampleResponse in
return try exampleResponse.content.decode(ExampleData.self)
}
return ans
}