【问题标题】:Swift Struct as Request BodySwift 结构体作为请求体
【发布时间】:2020-03-07 21:37:17
【问题描述】:

尝试使用 Vapor 和 Swift 将数据发送到我的 postgreSQL 数据库。

这里是示例代码(Swift Struct 作为请求正文)

struct ToDoResponseModel: Codable {
   var id: Int
   var Name: String
   var isComplete: Bool
}

let url = URL(string: "http://localhost:8080/todos")
guard let requestUrl = url else { fatalError() }
var request = URLRequest(url: requestUrl)
request.httpMethod = "POST"

// Set HTTP Request Header
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

let newTodoItem = ToDoResponseModel(id: 300, Name: "Urgent task 2", isComplete: true)

do {
    let jsonData = try JSONEncoder().encode(newTodoItem)
    request.httpBody = jsonData
}catch let jsonErr{
    print(jsonErr)
}

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

    if let error = error {
        print("Error took place \(error)")
        return
    }
    guard let data = data else {return}

    do {
        let todoItemModel = try JSONDecoder().decode(ToDoResponseModel.self, from: data)
        print("Response data:\n \(todoItemModel)")
        print("todoItemModel Name: \(todoItemModel.Name)")
        print("todoItemModel id: \(todoItemModel.id )")
    } catch let jsonErr {
        print(jsonErr)
    } 
}
task.resume()

但我遇到了下一个错误:

keyNotFound(CodingKeys(stringValue: "id", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No 与键 CodingKeys 关联的值(stringValue: \"id\", intValue: nil) (\"id\").", 底层错误: nil))

修正了这一行的错误:

let todoItemModel = try JSONDecoder().decode(ToDoResponseModel.self, from: data)

Vapor 发给我:

[ 错误 ] DecodingError.keyNotFound:键“IsComplete”所需的值。 (ErrorMiddleware.swift:26)

【问题讨论】:

  • 您是否检查过data 包含isComplete 的密钥对?

标签: json swift postgresql vapor decodable


【解决方案1】:

看起来您正在从客户端发送 isComplete,但 Vapor 服务器期待 IsComplete(大写 I)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 2019-03-17
    • 1970-01-01
    • 2015-02-16
    • 2019-09-15
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多