【问题标题】:How to send complex type request using Alamofire如何使用 Alamofire 发送复杂类型的请求
【发布时间】:2019-04-21 11:40:38
【问题描述】:

我必须向服务器发送请求。保存用户记录。用户记录包含 Subject 的模型,并且该 Subject 还包含多个模型和数组。让我给你举个小例子。

@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 数组。所有模型都是可编码的。

所以我的 web 服务所需的 JSON 必须如下所示

{ApiKey:"asas-dsadas-xyz-xyz","StudentSubjects":{现在来了 arrays,"InnerList":[这里是内部数组]}}

问题:

  1. 如您所见,我已将 Codables 实施到我的模型中,所以我的 Json 越来越好,但我无法附加 Api Key
  2. 我也不知道如何发送诸如 Alamofire 参数之类的东西。
  3. 或者您可以简单地说“如何以 json 格式发送 StudentSubject 和 Apikey

请帮助我,我在敲我的头,但无法在服务器端得到回复,事实上我得到了空值。

UPDATE1:我就是这样做的

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

【问题讨论】:

  • 无法附加ApiKey是什么意思?关于第二个问题,我认为这是一个很好的例子,如何发送参数stackoverflow.com/a/32013715/1856499
  • @m1sh0 很简单,我必须发送 StudentSubject 数组,我可以从 codable 中获取,但是当我得到 StudentSubjectm 的 Json 时,我无法在其中附加 Apikey,实际上我是初学者在iOS中,但是需要交付这个应用,我是android开发者,所以在Android中我们使用发送JsonArray和JsonObect并编写解析器,这里我学习了codable,但现在我很无奈。
  • @m1sh0 simple 我想知道如何以json格式发送StudentSubject和Apikey数组
  • 好的,首先你需要所有对象让参数的字典:[String: Any] = ["ApiKey":"asas-dsadas-xyz-xyz","StudentSubjects": [subjectModel1,sm2.. .]] 并将其传递给 Alamofire.request。如果添加编码,Alamofire 会将对象转换为 json: JSONEncoding.default
  • 请回复我,以及如何发送 Subjectmodel1, sm2 in list ?

标签: ios json swift4 alamofire codable


【解决方案1】:

你需要的是使用这个方法(我不确定你是否需要 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 的转换。

【讨论】:

  • 你能告诉我你是如何生成你的StudnetSubjectsList的吗?你有什么错误
  • 简单,用户在表单中输入值,然后我填写我的模型值,如名称等,非常简单
  • 也许尝试再创建一个类 public class RequestModel: Codable { public var ApiKey : String? =“”公共var StudentSubjects:[SubjectModel]? = [] }
  • 我猜但是你可以直接传递,或者至少你可以用 JSONEncoder 将它转换为 Jason 字符串并发送它
猜你喜欢
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
相关资源
最近更新 更多