【发布时间】: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