Как отправить запрос сложного типа с помощью Alamofire - PullRequest
0 голосов
/ 19 ноября 2018

Я должен отправить запрос на сервер.Сохранение записи пользователя.Пользовательская запись содержит модель субъекта, и этот субъект также содержит несколько моделей и массивов.позвольте мне привести небольшой пример.

@ignore 
public class SubjectModel: Codable {
    public var Name : String? = ""
    public var Price : Int? = 0
    public var ISBN : String? = ""
    public var listTeachers : [TeacherModel]? = []

}

public class TeacherModel: Codable {
    public var Name : String? = ""
    public var PhoneNo : String? = ""
    public var listClasses: [ClassModel]? = []

}

public class ClassModel: Codable {
    public var Name : String? = ""
    public var Section : String? = ""
     public var RoomNo : String? = ""


}

Так что мне нужно отправить SubjectModel, и, как вы можете видеть, SubjectModel содержит несколько массивов InnerModel.Все модели являются кодируемыми.

Таким образом, JSON, необходимый для моего веб-сервиса, должен выглядеть следующим образом:

{ApiKey: "asas-dsadas-xyz-xyz", "StudentSubjects": {Теперь вот массивы "InnerList ": [здесь идут внутренние массивы]}}

Проблемы:

  1. Как вы можете видеть, я реализовал Codables для моей модели, поэтомуЯ поправляюсь и ожидаю Джсона, но я не могу прикрепить ключ Api
  2. Также у меня нет идеи, как отправить такую ​​вещь как Параметры Alamofire.
  3. Или Вы можете сказать это просто как " Как отправить StudentSubject и Apikey также в формате json "

Пожалуйста, помогите мне, я бьюсь головойно не могу получить ответ на стороне сервера, потому что я получаю нулевое значение.

ОБНОВЛЕНИЕ 1: Вот как я это делаю

let jsonEncoder = JSONEncoder()
    let jsonData = try jsonEncoder.encode(mySubjectModel)
    let json = String(data:jsonData,encoding:String.Encoding.utf8)


let parameter: [String:AnyObject] = [
            "StudentSubjects" : json as AnyObject,
            "ApiKey":"xyz-zyz-zyz"
    ]

И затем отправляю это так

Alamofire.request(Common.URL+ServiceMethodName, method: .post, parameters:parameter, encoding: JSONEncoding.default, headers: nil) .responseJSON { response in

1 Ответ

0 голосов
/ 19 ноября 2018

Вам нужно использовать этот метод (я не уверен, что вам нужно PUT или POST, но это должен быть POST)

Alamofire.request(.POST, "http://myserver.com", parameters: parameters, encoding: .JSON)
    .responseJSON { request, response, JSON, error in
        print(response)
        print(JSON)
        print(error)
    }

объект параметров

let parameters: [String: AnyObject] = [
    "ApiKey" : "asas-dsadas-xyz-xyz",
    "StudentSubjects" : yourStudnetSubjectsList
]

Alamofire сделает для вас преобразование в JSON.

...