Swift 带有JSON响应的Alamofire错误

Swift 带有JSON响应的Alamofire错误,swift,swift3,alamofire,Swift,Swift3,Alamofire,我已经为Alamofire问题挣扎了好几天,我不确定它是来自后端还是我构建代码的方式 问题是: 当我向Postman发送我的API文本时,如果我点击params按钮并添加参数,我会得到正确的响应。请注意,下半身是空的,但上半身充满了参数 但是,当我使用具有相同信息的较低参数时,我会得到一个没有JSON的错误。当我尝试使用相同的链接调用API时,Xcode中也会出现相同的错误 这是Xcode Alamofire错误 失败:responseSerializationFailed(Alamofire

我已经为Alamofire问题挣扎了好几天,我不确定它是来自后端还是我构建代码的方式

问题是:

当我向Postman发送我的API文本时,如果我点击params按钮并添加参数,我会得到正确的响应。请注意,下半身是空的,但上半身充满了参数

但是,当我使用具有相同信息的较低参数时,我会得到一个没有JSON的错误。当我尝试使用相同的链接调用API时,Xcode中也会出现相同的错误

这是Xcode Alamofire错误

失败:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(错误域=NSCOCAERRORDOMAIN代码=3840“字符0周围的无效值”。用户信息={NSDebugDescription=字符0周围的无效值。}))

这是邮递员的错误

最后,这是我调用API的代码:

    let urlStr = "api/client/meal_add"
    let url = URL(string: urlStr)
    let para = ["meal_id": "31",
                "user_id": "2",
                "qty":"2"]

    let headers: HTTPHeaders = [
        "Auth": "Auth" // Edited for security
    ]

    Alamofire.request(url!, method: .post, parameters: para,encoding: URLEncoding.default, headers: headers).responseJSON { response in
        print(response)
        print(response.result.debugDescription)
        if let value : AnyObject = response.result.value as AnyObject {

5天前它还可以正常工作,但我不知道为什么它停止了。另外,在其他视图控制器中,我对相同的API执行HTTP调用,并且响应没有问题,只有这一个

首先,我想谈谈HTTP get和post请求之间的区别。Get请求正在url中放置参数。它们以这种格式附加到url

URL?key1=value1&key2=value2
该URL的RESTful handler随后将解析键值对并使用它们。当你点击邮递员中的param按钮时,它实际上在做这个将param附加到url的事情。然而,当你有很多参数时,这个问题就会出现。通常,如果url长度超过8000,则会出现一些问题。因此,post请求实际上是将参数嵌套在请求内部,而不是url上。因此,通常在post请求中,您只会看到URL,而不会看到
?key1=value1&key2=value2
部分

回到您的问题,我不知道您的服务器端如何使用url中的参数处理此post请求,但由于url中带有参数的空post请求有效,在您的swift代码中,您可以简单地将参数附加到url中,然后执行不带参数的post请求

let urlStr = "api/client/meal_add?meal_id=31&user_id=2&qty=2"
let url = URL(string: urlStr)

Alamofire.request(url!, method: .post, parameters: [],encoding: URLEncoding.default, headers: headers).responseJSON { response in

接下来,我强烈建议您查看一下服务器端,确保您的post请求以正确的方式编写

您是说同样的代码可以在其他视图控制器上工作,而不是在当前的视图控制器上?相同的代码和不同的URL可以正常工作。对于postman中的第一个请求,如何在该窗口中添加键值pare?为什么url看起来像get请求,而不是post?当我单击“发送”旁边的“参数”按钮时,它会打开一个新的正文部分。我的url是一个post请求,我失败了
UserInfo={NSUnderlyingError=0x60800059920{Error Domain=kCFErrorDomainCFNetwork code=-1002“(null)”},NSErrorFailingURLStringKey=api/client/Found\U add?user\u id=2&Found\U id=31&qty=2,NSErrorFailingURLKey=api/client/Found\U add?user\id=2&Found\id=31&qty=2,NSLocalizedDescription=不受支持的URL}