Как отправить тело json в запрос на получение - PullRequest
0 голосов
/ 10 июля 2019

Я знаю, что отправка json body в запросе get нарушает правила http, однако в соответствии с требованием клиента сервер принимает json body в запросе get. Поэтому я хочу отправить тело json в моем запросе get с использованием alamofire.

Я пробовал различные типы кодирования параметров. Ничего не получалось.

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-объектов в ответ.но фактический вывод - ошибка тайм-аута

1 Ответ

0 голосов
/ 10 июля 2019

На самом деле вы должны изменить метод кодирования для запроса get.Вы установили encoding: JSONEncoding.default.Вместо этого используйте encoding: URLEncoding.default.

Во-вторых, если вы отправляете параметры в json body, тогда отправьте все параметры вместо некоторых с body и некоторых в url.Итак, ваш api_key=\(api_key) должен быть в теле json.

Надеюсь, это решит вашу проблему.

...