【问题标题】:Alamofire 5 POST method having array parameters usage with swift 5Alamofire 5 POST 方法与 swift 5 一起使用数组参数
【发布时间】:2020-04-05 07:41:21
【问题描述】:

我正在开发一个使用 Swift 5 和 Almofire 5.0.2 的 iOS 项目。我尝试了与此类似的在线线程上建议的所有选项,但看起来我仍然缺少一些东西。

我在 POST 方法 API 调用期间遇到困难,其中包含一组项目作为请求正文的一部分。

API 看起来像:

@RequestMapping(...)
SomeResponse doSomething (@RequestBody SomeRequest request) {}

我正在使用 Swift 5 和 alamo fire 5.0.2 版本,我尝试了上面的选项和下面的选项,但它根本没有命中 API(返回 AFError):

let parameters: [String: Any] = [
            "block": true,
            "items": [],
            "name": "xxxxx",
            "mobile": "xxxxxxxxxx",
            "email": "xxxx@gmail.com",
            "List": [["place": "london"],["place": "holand"]]

  ]

AF.request(BookingConstants.httpEndpoint, method: .post, parameters: parameters, headers: headers)
            .validate()
            .responseData { response in

}

我在 java spring boot API 端收到此错误:

Invalid index in property path 'item[][place]'; nested exception is java.lang.NumberFormatException: For input string: ""] with root cause

java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.8.0_221]
    at java.lang.Integer.parseInt(Integer.java:592) ~[?:1.8.0_221]
    at java.lang.Integer.parseInt(Integer.java:615) ~[?:1.8.0_221]
    at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:663) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyHoldingValue(AbstractNestablePropertyAccessor.java:402) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.AbstractNestablePropertyAccessor.processKeyedProperty(AbstractNestablePropertyAccessor.java:298) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:289) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:280) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:95) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:859) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.validation.DataBinder.doBind(DataBinder.java:755) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:192) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:106) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE

我知道我遗漏了一些东西,但无法弄清楚。有人可以帮我解决这个问题吗?如果有的话,请告诉我您的 cmets/建议。提前致谢

【问题讨论】:

  • 您需要发布您遇到的错误。
  • @JonShier 谢谢!我已经更新了日志
  • 我的意思是客户端错误。但听起来您发送的数据不正确,因此服务器可能会响应不包含 JSON 的 500 错误。
  • @JonShier:感谢您分享您的想法。客户端没有错误,因为这是一个错误的请求,正如你所说,我没有以正确的格式发送数据。这就是我被困的地方,从 iOS 客户端发送此类数据的正确方法是什么。也许我必须改用其他的 almofire 替代品。
  • 如果您不知道您的参数应该是什么样子,我不确定为什么另一种方法会有所帮助。服务器期望什么样的参数编码?

标签: spring-boot alamofire swift5 xcode11.2 alamofire-request


【解决方案1】:

我切换回Alamofire 4.0.1版本,使用Alamofire上传的方式来实现。

let objectAsJSON: JSON = request.toJSON()
let data: Data = try objectAsJSON.serialize()

Alamofire.upload(data, to: BookingConstants.httpEndpoint, headers: headers)
                .validate()
                .responseData { response in
        // response code logic

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多