AFDataResponse: преобразование данных в формат JSON Swift 5 - PullRequest
0 голосов
/ 27 мая 2020

Я реализовал следующий код

AF.request(url, method: .post, parameters: parameter, encoding: JSONEncoding.default).responseData(completionHandler: {response in

            print(response)

            switch response.result {
            case .success:

                print(response.result)
               let alertVC = self.alertservices.alert(title: "Add Recipe : Basic Level", message: "Your basic level recipe details has been submitted successfully!", cancelTitle: "Cancel", submitTitle: "Ok", alertimage: "recipes"){
                   self.detailContainerView.isHidden = false

               }
               self.present(alertVC,animated: true)

                break
            case .failure :
                let alertVC = self.alertservices.alert(title: "Add Recipe : Basic Level", message: "Something went wrong. Please try again!", cancelTitle: "Cancel", submitTitle: "Ok", alertimage: "recipes"){

                }
                self.present(alertVC,animated: true)
                break
            }
})

Если я использую .responseData, я получаю этот результат success(118 bytes) вместо того, что указано ниже. Но фактический ответ, который я получаю, когда помещаю значения в почтальон, - это

{
    "response": "success",
    "status": 0,
    "recipe_id": 10422
}

Если я использую .responseJSON, на консоли отображается следующая ошибка:

["recipe_preparation_time": "00:10:00", "recipe_title": "test recipe", "recipe_category": "2", "veg_status": "1", "recipe_food_type[]": [1, 3], "type": "3", "recipe_cooking_time": "00:10:00", "recipe_country": "", "customer_id": "5", "added_by": "5", "difficulty_level": "1"]
success({
    error =     {
        "recipe_food_type" =         (
            "The recipe food type field is required."
        );
    };
    message = "Validation Error";
    status = 406;
})

Может ли кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Как @Frankenstein упомянул, что хорошо создать структуру Codable. Но когда вы используете Alamofire, вы можете использовать:

AF.request(url).validate().responseDecodable(of: Response.self) { response in   
  // and then on response.value you have your response struct
}
0 голосов
/ 27 мая 2020

Создайте структуру Codable resposne и декодируйте, используя JSONDecoder():

struct Response: Codable {
    let response: String
    let status, recipeId: Int

    enum CodingKeys: String, CodingKey {
        case response, status
        case recipeId = "recipe_id"
    }
}

Добавьте этот формат по вашему запросу:

AF.request(url, method: .post, parameters: parameter, encoding: JSONEncoding.default).validate().responseDecodable(of: Response.self) { response in
...