【问题标题】:How to pass JSON object in Alamofire request swift 3如何在 Alamofire 请求 swift 3 中传递 JSON 对象
【发布时间】:2017-11-16 02:17:46
【问题描述】:

我正在使用Alamofire API 进行服务调用。到目前为止GET 方法工作正常。现在我需要做一个PUT 请求。它也接受这种类型的主体参数。

{
"LeaveEntryCode":0,
"RequestId":0,
"EmployeeCode":17227,
"LeaveYear":2017,
"LeaveTypeCode":1,
"LeaveReasonCode":1,
"BaseType":"ess",
"StartDate":"2017-06-16T00:00:00",
"EndDate":"2017-06-16T00:00:00",
"NoOfDays":1.0,
"StartDateSession":"full",
"EndDateSession":"full",
"PreApproved":false,"ForDate":"1901-01-01T00:00:00",
"Remarks":"I have to attend for a wedding of my close relatives",
"CoveringPersonCode":0,
"RequestStatus":"P",
"Deleted":false,
"Status":false,
"CreatedBy":0,
"CreatedDate":"0001-01-01T00:00:00",
"UpdatedBy":0,
"UpdatedDate":"0001-01-01T00:00:00",
"DeletedBy":0,
"DeletedDate":"0001-01-01T00:00:00",
"ModuleId":2,
"ObjectId":20,
"StartDateString":"06/16/2017",
"EndDateString":"06/16/2017",
"LeaveDayList":["06/16/2017-FH,06/16/2017-SH"],
"SystemLeaveTypeCode":"ANN",
"LeaveTypeName":"ANNUAL",
"Employee":null,
"LieuDayList":null,
"BaseLeaveType":"ANN",
"CoveringPersonName":"",
"LeaveReasonName":"Personal",
"DocumentSource":"LEAVE",
"AttachedDocument":null
}

我创建了一个[String:Any] 对象并在以下请求中分配给​​parameters

但是我在调​​用中遇到了一个名为 Extra argument 'method' 的错误。

但如果我将其分配为["":""],则该错误就会消失。我该如何解决这个问题?请帮帮我。

Alamofire.request(urlString, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: headerToken)

更新

var dictionary:[String:String]!
dictionary=[
            "LeaveEntryCode":"0",
            "RequestId":dm.strReqID,
            "EmployeeCode":dm.strEmpCode,
            "LeaveYear":dm.selectedYear,
            "LeaveTypeCode":dm.selectedLeaveTypeCode,
            "BaseType":"ess",
            "StartDate":dm.startDate,
            "EndDate":dm.endDate,
            "NoOfDays":dm.noOFDays,
            "StartDateSession":dm.startDateSession,
            "EndDateSession":dm.endDateSession,
            "RequestStatus":"P",
            "PreApproved":"0",
            "ForDate":"01/01/1901",
            "Remarks":comment,
            "CoveringPersonCode":dm.strcoveringPersonCode,
            "LeaveDayList":strDayLvList,
            "BaseLeaveType":dm.selectedLeaveTypeCode,
            "LeaveReasonCode":dm.selectedReasontypeCode,
            "AttachedDocument":"null"
            ]

【问题讨论】:

  • 显示你的parameters字典的声明
  • 将声明从[String:String]更改为[String:Any]表示var dictionary:[String:Any]!
  • 我是否也需要将其转换为 json,因为我在 rest 客户端尝试了它不接受时有 [ ] 而不是 {}
  • 我只是说将声明从[String:String] 字典更改为[String:Any] 字典,[String:Any] 仍然是字典而不是数组。
  • @user1960169 你在 Alamofire.request(urlString, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: headerToken) 中使用的“方法”的类型是什么?

标签: ios json swift3 alamofire put


【解决方案1】:

制作[String:AnyObject]?类型的参数,取决于你是否需要参数给它赋值或设置为nil。对于标题,使其类型为[String:AnyObject]?。因此,如果您没有标头,请将其设为nil。例如 var 字典:[字符串:字符串]?

if shouldAddParams{
dictionary=[
            "LeaveEntryCode":"0",
            "RequestId":dm.strReqID,
            "EmployeeCode":dm.strEmpCode,
            "LeaveYear":dm.selectedYear,
            "LeaveTypeCode":dm.selectedLeaveTypeCode,
            "BaseType":"ess",
            "StartDate":dm.startDate,
            "EndDate":dm.endDate,
            "NoOfDays":dm.noOFDays,
            "StartDateSession":dm.startDateSession,
            "EndDateSession":dm.endDateSession,
            "RequestStatus":"P",
            "PreApproved":"0",
            "ForDate":"01/01/1901",
            "Remarks":comment,
            "CoveringPersonCode":dm.strcoveringPersonCode,
            "LeaveDayList":strDayLvList,
            "BaseLeaveType":dm.selectedLeaveTypeCode,
            "LeaveReasonCode":dm.selectedReasontypeCode,
            "AttachedDocument":"null"
            ]
} else {
dictionary = nil
}

【讨论】:

    【解决方案2】:

    //试试这个 Alamofire.request(urlString, method: method, parameters: parameters as! Parameters, encoding: JSONEncoding.default, headers: headerToken)

    【讨论】:

      【解决方案3】:

      您在调用中遇到了一个名为 Extra argument 'method' 的错误,这是由于标头引起的,

      尝试将标题传递为 nil 或如下:

      //Here param equals to your dictionary as [String :Any]
      
      //Pass Headers as Dictionary as well.
      
           Alamofire.request("", method: .post, parameters: param, encoding: JSONEncoding.default, headers:["" : ""])
      

      它对我有用。

      也请检查此链接: Alamofire Swift 3.0 Extra parameter in call

      【讨论】:

      • 但我还需要传递一些标题
      【解决方案4】:

      参数应该是Parameters 类型而不是字典。

      试试这个:

      let parameters: Parameters = [
                      "LeaveEntryCode":"0",
                      "RequestId":dm.strReqID,
                      "EmployeeCode":dm.strEmpCode,
                      "LeaveYear":dm.selectedYear,
                      "LeaveTypeCode":dm.selectedLeaveTypeCode,
                      "BaseType":"ess",
                      "StartDate":dm.startDate,
                      "EndDate":dm.endDate,
                      "NoOfDays":dm.noOFDays,
                      "StartDateSession":dm.startDateSession,
                      "EndDateSession":dm.endDateSession,
                      "RequestStatus":"P",
                      "PreApproved":"0",
                      "ForDate":"01/01/1901",
                      "Remarks":comment,
                      "CoveringPersonCode":dm.strcoveringPersonCode,
                      "LeaveDayList":strDayLvList,
                      "BaseLeaveType":dm.selectedLeaveTypeCode,
                      "LeaveReasonCode":dm.selectedReasontypeCode,
                      "AttachedDocument":"null"
                      ]
      

      【讨论】:

      • 当我不想传递正文参数时,如何传递空值或空值?当它是 [String:String] 时,当我不想传递这些参数时,我以 ["":""] 的形式传递。请告诉我好吗?
      • 如果您不想发送正文参数,请将正文参数创建为 - let bodyParams : Parameters = [:] 并传递 bodyParams 。您也可以对“headerParams”执行相同的操作。
      • [] nw_endpoint_flow_service_writes [1.1 23.99.116.70:443 ready socket-flow (satisfied)] 写入请求的帧数为 4294967295,字节数为 0 更改为 [:]这是我不需要发送正文参数的另一种方法:(
      • 在响应/错误中你得到这个还是服务器端日志?
      • 太棒了!如果我的回答对你有帮助,请采纳。快乐的编码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2018-03-01
      • 2018-02-10
      相关资源
      最近更新 更多