티스토리 뷰

우리가 Alamofire를 이용하여서 파라메터를 전송할때 Array가 포함되어 있을 경우가 있습니다.

이러한 경우에는 서버쪽에서 받아주는 값이랑 맞추어 주어야 하는데요. 기본값은 다음과 같이 동작합니다.


1
foo[]=bar1&foo[]=bar2



그렇습니다. 이렇게 연속으로 가면서 [] 브라켓을 달고 가게 됩니다.

이것을 빼보도록 할게요...


1
foo=bar1&foo=bar2
cs


이런 형태로 전송이 될것입니다.


1. 우선 그렇다면 이것을 Custom하게 만드는 방법입니다.


1
2
3
4
5
6
7
8
9
10
11
12
// Remove square brackets for GET request
struct CustomGetEncoding : ParameterEncoding {
    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var request = try URLEncoding().encode(urlRequest, with: parameters)
        request.url = URL(string: request.url!.absoluteString.replacingOccurrences(of: "%5B%5D="with"="))
        return request
    }
}
 
...
 
Alamofire.request("http://example.com", method: .get, parameters: ["foo": ["bar1""bar2"]], encoding: CustomGetEncoding())


이렇게 하게 되면 위에 표현한 상태인 브라켓이 사라진 형태로 전송이 됩니다.


2. Alamofire에서 만들어줬습니다. ㅠㅠ


이것을 구현해서 하려고 별것들을 다 찾아보았는데 별다른 좋은 방법이 발견되지 않았고... 만들어서 사용하였는데요.


아주 좋은 방법이 있습니다.


Alamofire를 4.7.0 이상으로 일단 업데이트를 하여줍니다.


1
URLEncoding(arrayEncoding: .noBrackets)



이것을 사용하여 줍니다.



아무래도 조직에 따라서는 Alamofire를 업데이트를 하지 못하는 조직도 있을수 있어서 그럴 경우에는 1의 방법을 사용하고 그렇지 않을 경우에는 2의 방법을 사용하도록 하면 되겠습니다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함