【问题标题】:Filter data From vapor client get从蒸汽客户端过滤数据
【发布时间】:2018-11-25 06:02:00
【问题描述】:

我正在使用 vapor 的客户端来获取 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,但如果我将其更改为 Future 并将映射设置为 .map(to: ExampleData.self ..)

我明白了

无法将“响应”类型的返回表达式转换为返回类型 'TodoController.ExampleData'

【问题讨论】:

  • 可能是个愚蠢的问题,但您是否仍在返回您在.map(to: ExampleData.self... 中创建的Response 对象?还是您将其更改为返回 ExampleData 结构?
  • @ssrobbi 返回的类型为 ExampleData

标签: swift get client vapor server-side-swift


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2020-05-15
    • 2021-07-28
    • 2014-09-18
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多