Swift 构造为请求正文
Swift Struct as Request Body
正在尝试使用 Vapor 和 Swift 将数据发送到我的 postgreSQL 数据库。
这是示例代码(Swift 构造为请求主体)
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
value associated with key CodingKeys(stringValue: \"id\", intValue:
nil) (\"id\").", underlyingError: nil))
此行修复的错误:
let todoItemModel = try JSONDecoder().decode(ToDoResponseModel.self, from: data)
Vapor 发给我:
[ ERROR ] DecodingError.keyNotFound: Value required for key 'IsComplete'. (ErrorMiddleware.swift:26)
您似乎是从客户端发送 isComplete
,但 Vapor 服务器需要 IsComplete
(大写 I)
正在尝试使用 Vapor 和 Swift 将数据发送到我的 postgreSQL 数据库。
这是示例代码(Swift 构造为请求主体)
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 value associated with key CodingKeys(stringValue: \"id\", intValue: nil) (\"id\").", underlyingError: nil))
此行修复的错误:
let todoItemModel = try JSONDecoder().decode(ToDoResponseModel.self, from: data)
Vapor 发给我:
[ ERROR ] DecodingError.keyNotFound: Value required for key 'IsComplete'. (ErrorMiddleware.swift:26)
您似乎是从客户端发送 isComplete
,但 Vapor 服务器需要 IsComplete
(大写 I)