【发布时间】:2020-08-22 03:26:15
【问题描述】:
我正在尝试将 JSON 主体发送到 REST API,但它只读取第一个参数,根本无法识别 JSON 的其余部分。我测试了错误输入 JSON 正文的其他部分,但没有像往常一样收到错误。
func postRequest(classroomID: String, email: String, vote: String){
//declare parameter as a dictionary which contains string as key and value combination.
let parameters = [
"classroomID": classroomID,
"LastUpdated": "2020-01-01",
"TheVoteData"[
"Email": email,
"TheVote": vote
]
]
//create the url with NSURL
let url = URL(string: "https://www.api-gateway/dynamoDB/resource")!
//create the session object
let session = URLSession.shared
//now create the Request object using the url object
var request = URLRequest(url: url)
request.httpMethod = "POST" //set http method as POST
do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to data object and set it as request body
} catch let error {
print(error.localizedDescription)
}
//HTTP Headers
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
//create dataTask using the session object to send data to the server
let task = session.dataTask(with: request, completionHandler: { data, response, error in
guard error == nil else {
completion(nil, error)
return
}
guard let data = data else {
return
}
do {
//create json object from data
guard let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] else {
return
}
print(json)
completion(json, nil)
} catch let error {
print(error.localizedDescription)
}
})
task.resume()
}
这会将教室 ID 发布到数据库,但不会发送电子邮件或投票。 我从这里得到了这个方法:How to make HTTP Post request with JSON body in Swift
非常感谢任何帮助!
编辑:我能够通过将 API Gateway 配置为将输入作为简单数组而不是字典数组来解决我的问题。非常感谢所有花时间帮助我的人!
【问题讨论】:
-
将 request.httpBody 数据转换为字符串并打印出来(告诉我们它是什么)。
-
您是否有 API 规范或来自服务器的一些代码来显示它所期望的 JSON 格式
-
@LouFranco 当我打印 request.httpBody 数据时我得到的唯一东西是 132 字节。而且,服务器期待 { "ClassroomId":"api-test", "LastUpdated":" 2020-05-07", "TheVoteData":[ { "Email": "123@abc.com", "Vote": "知道了" } ] }