我知道在get请求中发送json正文违反了http规则,但是根据客户端的要求,服务器在get request中接受json正文。因此我想使用alamofire在我的get请求中发送json正文。
我尝试了各种参数编码类型。没有任何效果。
func listNews( withCompletionHandler:@escaping (_ status:Bool, _ message: String, _ yearLevels: JSON) -> Void){
let parameters = [
"month": "07",
"year": "2019",
"record_start": 0,
"record_offset": 100
] as [String : Any]
let headers = [
"Content-Type": "application/json"
]
let url = STAFF_SERVICE_URL+"staff/2/news?api_key=\(api_key)"
print("URL > \(url)")
Alamofire.request(url, method: .get,parameters:parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
let statusCode = response.response?.statusCode
print(statusCode ?? "Success Error Code")
if(statusCode==200){
let swiftyJsonVar = JSON(response.result.value!)
print(swiftyJsonVar)
withCompletionHandler(true,"Success",swiftyJsonVar)
}else if(statusCode==400){
withCompletionHandler(false,"System Error. Please try again later.",JSON.null)
}else{
withCompletionHandler(false,"System Error",JSON.null)
}
}
}
我希望得到json对象数组作为响应。但实际输出是超时错误
答案 0 :(得分:0)
实际上,您应该更改get
请求的编码方法。您已设置encoding: JSONEncoding.default
。而是使用encoding: URLEncoding.default
。
第二件事,如果您要在json正文中发送参数,则发送所有参数,而不是使用body和url发送某些参数。因此,您的api_key=\(api_key)
应该在json正文中。
我希望这能解决您的问题。