Метод POST Alamofire 5 с использованием параметров массива с помощью swift 5 - PullRequest
0 голосов
/ 05 апреля 2020

Я работаю над проектом iOS с Swift 5 с Almofire 5.0.2. Я перепробовал все варианты, предложенные в онлайн-потоке, аналогичном этому, но похоже, что я все еще что-то упускаю.

Я сталкиваюсь с трудностями во время вызова API метода POST с массивом элементов, помимо запроса body.

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 стороне 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

Я знаю, что что-то упустил, но не смог понять это вне. Может кто-нибудь помочь мне с этим? Пожалуйста, дайте мне знать ваши комментарии / предложения, если таковые имеются. Заранее спасибо

1 Ответ

0 голосов
/ 12 апреля 2020

Я вернулся к версии 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

}
...