【问题标题】:API working in Postman but giving error in CodeAPI 在 Postman 中工作,但在代码中出现错误
【发布时间】:2023-04-08 21:13:02
【问题描述】:

我试图在邮递员中调用 API 并且它工作正常,但是如果我试图在 swift Alamofire 中调用 API,它会给我错误-

我的代码是-

func sendToServer(){
        let urlString = "https://xxxxxxxxxx/TempService/SaveBarCodes"
        
        let data:  Parameters = ["SerialNo": "T8180399","Status":101]
        

        Alamofire.request(urlString, method: .post, parameters: data,encoding: JSONEncoding.default, headers: nil).responseJSON {
        response in
          switch response.result {
                        case .success:
                            print(response)

                            break
                        case .failure(let error):

                            print(error)
                        }
        }
    }

错误是-

The JSON value could not be converted to System.Collections.Generic.List`1[BreakBulkModels.Model.WebapiModels.DtoInventoryApi]. Path: $ | LineNumber: 0 | BytePositionInLine: 1.

【问题讨论】:

    标签: swift alamofire


    【解决方案1】:

    您的 API 接受 JSON 对象数组作为参数,但您当前发送的是 JSON 对象:

    {
        "SerialNo": "T8180399",
        "Status": 101
    }
    

    因为ParametersDictionary<String, Any> 的类型别名(您需要的是Array<Dictionary<String, Any>>),所以您必须自己进行参数编码,然后通过您的URLRequest 调用Alamofire 的request(_:) 函数:

    do {
        let urlString = "https://xxxxxxxxxx/TempService/SaveBarCodes"
        let url = try urlString.asURL()
        var request = URLRequest(url: url)
        let data = [["SerialNo": "T8180399", "Status": 101]]
        request = try JSONEncoding.default.encode(request, withJSONObject: data)
        Alamofire.request(request).responseJSON { response in
            switch response.result {
            case .success:
                print(response)
                break
            case .failure(let error):
                print(error)
            }
        }
    } catch {
        print(error)
    }
    

    编辑:在 Alamofire v5 中,使用Encodable 协议有一种更优雅的方式:

    struct BarCode: Encodable {
        var SerialNo: String
        var Status: Int
    }
    
    func sendToServer(){
        let urlString = "https://xxxxxxxxxx/TempService/SaveBarCodes"
        let data = [BarCode(SerialNo: "T8180399", Status: 101)]
        AF.request(
            urlString,
            method: .post,
            parameters: data,
            encoder: JSONParameterEncoder.default
        ).responseJSON { response in
            switch response.result {
            case .success:
                print(response)
                break
            case .failure(let error):
                print(error)
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-27
      • 2021-01-26
      • 2016-11-27
      • 1970-01-01
      • 2019-11-24
      • 2021-01-18
      • 2021-12-26
      • 2021-09-13
      相关资源
      最近更新 更多