Search code examples
iosswiftalamofirepostmanobjectmapper

Alamofire - Bad request


I am afraid I cannot share the API url. But I have checked on Postman, it works. It is a POST request and following is the response :

{
    "user_key": "b0aebdedb15e2beaaf479ca3c4f8227e8e970681"
}  

Postman screenshot :

enter image description here

In code, this is the request I am making using Alamofire :

Alamofire.request("some url", method: .post, parameters: params, encoding: URLEncoding.httpBody, headers: ["Content-Type":"application/json"])
            .responseObject { (response: DataResponse<User>) in

                let userResponse = response.result.value
                print("")
    }

But userResponse comes to be nil. This is the User object :

import ObjectMapper

class User: Mappable {

    var authToken: String?

     required init?(map: Map) {

    }

    func mapping(map: Map) {
        self.authToken <- map["user_key"]
    }


}

I am using ObjectMapper here.

Assuming the it is not a JSON object, I tried to handle it as a String :

 Alamofire.request("some url", method: .post, parameters: params, encoding: URLEncoding.httpBody, headers: ["Content-Type":"application/json"])
            .responseString { (response: DataResponse<String>) in
                let dataUser = response.data as! Any
                let dataUser1 = response.data as! AnyObject
                let error = response.error
                let code = response.response?.statusCode
                print(response.value)
                print(response.result.value)
        }  

Still, nothing. I am not able to retrieve the value. The status code however comes out to be 400 (bad request). What exactly is it ? JSON object or String ? How do I fix this ?


Solution

  • Just try to replace

    this URLEncoding.httpBody to JSONEncoding.default

    JSONEncoding.default

    Uses JSONSerialization to create a JSON representation of the parameters object, which is set as the body of the request. The Content-Type HTTP header field of an encoded request is set to application/json.

    Alamofire reference