Мне нужно вызвать API одной публикации. Когда я попытался вызвать этот API в почтальоне, он увенчался успехом и работал отлично.
Но когда я попытался использовать этот API в своем коде, он выдал мне внутреннюю ошибку сервера (код ошибки 500). ).
Я попробовал другое решение, например, преобразовать мою модель запроса в строку json, а затем преобразовать в данные. И передать эти данные в API, но он все равно выдает мне код статуса 500.
Кто-нибудь может мне помочь?
Параметры запроса
{
"schedule_id": 1,
"date_of_survey": "2022-03-10",
"is_resolution_completed": 0,
"resolution_date": "",
"resolution_time": "",
"resolution_note": "",
"patient_id": 6,
"answers": [
{
"question_id":1,
"option_id":2,
"exceptiontxt":"",
"selectedAnswer": "7"
},
{
"question_id":2,
"option_id":5,
"exceptiontxt":"",
"selectedAnswer": "No"
},
{
"question_id":3,
"option_id":7,
"exceptiontxt":"",
"selectedAnswer": "No"
}
]
}
Модель класса моего запроса
struct SubmitSurveyRequest: Encodable {
var schedule_id: Int
var date_of_survey: String
var is_resolution_completed: Int
var resolution_date, resolution_time, resolution_note: String
var patient_id: Int
var answers: [SubmitSurveyRequestAnswer]
}
struct SubmitSurveyRequestAnswer: Encodable {
var question_id: Int
var option_id: Int
var exceptiontxt: String
var selectedAnswer: String
}
Моя функция вызова API
static func callAPIRaw(_ url: String,
params: E,
resultType: D.Type,
customHeader: HTTPHeaders? = headers,
httpMethod: HTTPMethod = .post,
_ completion: @escaping (Result) -> Void) {
let jsonEncoder = JSONEncoder()
jsonEncoder.outputFormatting = .prettyPrinted
var jsonData: Data = Data()
do {
jsonData = try jsonEncoder.encode(params)
} catch let error {
debugPrint("Error while encoding data (\(error.localizedDescription))")
}
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = httpMethod.rawValue
request.headers = customHeader!
request.httpBody = jsonData
if Helper.checkInternetConnection() {
AF.session.configuration.timeoutIntervalForRequest = 300
AF.request(request).responseJSON { (response) in
switch response.result {
case .success(_):
if response.value != nil, response.value is Dictionary {
//debugPrint(url, params, response.value ?? "")
let decodedData: D?
do {
let status: Int = (response.value as? NSDictionary)?.value(forKey: "status") as? Int ?? 0
let message: String = (response.value as? NSDictionary)?.value(forKey: "msg") as? String ?? ""
//Status = 0 -> Fail, Status = 1 -> Success
if status == 0 {
if response.response!.statusCode == 500 {
completion(.failure(.otherError(msg: "internal_server_error".localized, code: response.response!.statusCode)))
} else if response.response!.statusCode == 401 {
Helper.logout()
} else {
completion(.failure(.otherError(msg: message, code: response.response!.statusCode)))
}
} else {
decodedData = try JSONDecoder().decode(resultType, from: response.data!)
completion(.success(decodedData!))
}
} catch let error {
debugPrint("Error while decoding data (\(error.localizedDescription))")
completion(.failure(.otherError(code: response.response!.statusCode)))
}
} else {
completion(.failure(.otherError(code: response.response!.statusCode)))
}
case .failure(_):
completion(.failure(.otherError(code: response.response?.statusCode ?? 500)))
}
}
} else {
completion(.failure(.networkError()))
}
}
Подробнее здесь: https://stackoverflow.com/questions/714 ... tatus-code