Search code examples
iosswiftpostmanalamofire

Failed response from **Alamofire** in swift 5


I'm using Alamofire class for api calling. Api is working properly in Postman please check below two screenshots for reference, enter image description here in first image data is passing inside raw body

enter image description here in second image data is passing inside Headers field now i'm using this code to call API

//for params i'm sending below parameters
//["phoneNumber":"911234567890", "countryCode" : "91"]

let headers: HTTPHeaders = [
            "deviceId" : deviceId,
            "osVersion": osVersion,
            "deviceType": deviceType,
            "resolution":resolution,
            "buildNumber":buildNumber]

AF.request(strURL, method: .post, parameters: params, encoding: JSONEncoding.default, headers:headers).responseData { (response) in
                switch response.result {
                case .success(let data):
                    do {
                        //let asJSON = try JSONSerialization.jsonObject(with: data)
                        let asJSON = try JSONSerialization.jsonObject(with: data, options: [.fragmentsAllowed])

                        // success
                        print(asJSON)
                        let res : NSDictionary = (asJSON as AnyObject) as! NSDictionary
                        successBlock(res)
                    } catch { // error
                        print("decoding error:\n\(error)")
                    }
                case .failure(let error):
                    print(error)
                    failure(error)
                }
            }

in all other project above code is working fine for api calling, but here i'm getting below error { code = 500; data = ""; message = "Failed to convert value of type 'java.lang.String' to required type 'java.util.Locale'; nested exception is java.lang.IllegalArgumentException: Locale part "en;q=1.0" contains invalid characters"; …………………… NamedValueMethodArgumentResolver.java:125)\n\t... 97 more\n"; status = "INTERNAL_SERVER_ERROR"; timestamp = "01-03-2022 07:55:20"; } i've try several methods like URLEncoding.default, passing custom header, create custom raw request & passed header inside but nothing works, AnyOne have solution for this issue? Thanks in Advance.


Solution

  • As it is throwing error related to Local, I think some language is defined and it doesn't accept * for Accept-Language header, try sending "en" in the header Accept-Language.

    Check subtags for language: http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry :

    Test Code:

    func callAPI() {
        
        let params: Parameters = ["phoneNumber":"911234567890", "countryCode" : "91"]
        let headers = [
            "deviceId" : "jdhcbkerfjkr",
            "osVersion": "3.2.3",
            "deviceType": "ANDROID",
            "resolution": "122x122",
            "buildNumber": "3.2.1",
            "Accept-Language": "en"]
        
        AF.request("[Test-URL]",
                   method: .post,
                   parameters: params,
                   encoding: JSONEncoding.default,
                   headers: HTTPHeaders.init(headers)).response { response in
            print(String(data: response.data!, encoding: .utf8)!)
        }
    }