【发布时间】:2019-05-08 07:27:49
【问题描述】:
我正在使用所需的 body 参数发出POST 请求,在POSTMAN 中测试这个POST 请求会给我正确的响应,但是当我从我的代码中传递相同的body 参数时,我出现以下错误-:
Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.
代码-:
func submitStudentAttendance(url:String,id:String,SessionID: Int,SchoolID:Int,BatchID:Int,ClassID:Int,SectionID:Int,Medium:Int,Date:String,accessToken:String) {
let params : [String:Any] = [
"$id":"1",
"SchoolID":1,
"SessionID":42,
"BatchID":106,
"ClassID":634,
"SectionID":1246,
"Medium":"English",
"Date":"0001-01-01T00:00:00",
"CreatedBy":118,
"CreatedOn":"2019-04-14T17:02:34",
"studentList":"",
"AttendenceData":"[{\"ID\":0,\"SchoolID\":null,\"SessionID\":null,\"ClassID\":634,\"SectionID\":1246,\"StudID\":\"DSM00399\",\"SubjectID\":null,\"Date\":\"0001-01-01T00:00:00\",\"Attendence\":\"P\",\"CreatedOn\":null,\"CreatedBy\":0,\"IsActive\":null,\"Remarks\":\"rem16\",\"timeID\":null,\"AtndType\":null,\"BatchID\":null,\"Medium\":null}]"
]
let urlRequest = NSURL(string: url)
var request = URLRequest(url: urlRequest! as URL)
let tokenString = "Bearer " + accessToken
request.httpMethod = "POST"
request.setValue(tokenString, forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let data = try! JSONSerialization.data(withJSONObject: params, options: [])
let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
if let json = json {
print(json)
}
request.httpBody = json!.data(using: String.Encoding.utf8.rawValue);
let alamoRequest = Alamofire.request(request as URLRequestConvertible)
alamoRequest.responseString {
response in
switch response.result {
case .success:
if response.data != nil {
do{
let json = try JSON(data: response.data!)
print(json)
}catch{
print(error)
}
}
break
case .failure(let error):
print(error)
}
}
}
正文部分与POSTMAN 中的完全相同,但仍然无法正常工作。谁能让我知道这里出了什么问题?这是服务器端问题还是我以错误的格式发送正文请求?
邮递员回应 -:
【问题讨论】:
-
这是服务器端问题,它清楚地表明您获得的值不是正确的 json 格式。没有投反对票
-
当您将
Data提供为request.httpBody时,您无需将其转换为NSString并最终转换为Data。并使用Dictionary类型而不是String作为"AttendenceData"键的值。