Мне нужно вызвать 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
Почтальон запускает API, но выдает ошибку в моем коде с кодом состояния 500. ⇐ IOS
Программируем под IOS
1737138667
Anonymous
Мне нужно вызвать API одной публикации. Когда я попытался вызвать этот API в почтальоне, он увенчался успехом и работал отлично.
Но когда я попытался использовать этот API в своем коде, он выдал мне внутреннюю ошибку сервера (код ошибки 500). ).
Я попробовал другое решение, например, преобразовать мою модель запроса в строку json, а затем преобразовать в данные. И передать эти данные в API, но он все равно выдает мне код статуса 500.
Кто-нибудь может мне помочь?
[b] Параметры запроса[/b]
{
"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"
}
]
}
[b]Модель класса моего запроса[/b]
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
}
[b]Моя функция вызова API[/b]
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()))
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/71424365/postman-runs-the-api-but-gives-an-error-in-my-code-with-500-status-code[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия