Alamofire JSON参数编码因Elasticsearch而失败

时间:2018-09-30 08:58:07

标签: ios swift elasticsearch swift4 alamofire

我正在尝试使用alamofire和swift 4请求进行弹性搜索。我尝试了json参数的每种编码类型,但请求仍然超时。如果我将nil参数设置为nil,响应会很好,但是我想构建一些查询参数。

我试图像这样构建参数:

    let jsonString = "{ \"query\": { \"multi_match\": { \"query\": \"param1 param2 alabala etc\", \"fields\": [\"title\", \"description\", \"category\"], \"fuzziness\": 5 } } }"
        let data = jsonString.data(using: .utf8)
        do {
            let params = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]
            print("ParamsJSON: \(params)")
        } catch {
            print(error)
        }

也这样:

   let params1 = [
        "query": [
            "multiMatch": [
                "query" : "param1 param2 alabala etc",
                "fields" : ["title*2, description*1.5"],
                "fuzziness" : 5
            ]
        ]
    ]

我的alamofire请求也在这里:

    let headers = [
        "Content-Type": "application/json"
    ]
    let url = "someurl"

    let request = Alamofire.request(url, method: .get, parameters: params1, encoding: JSONEncoding.default, headers: headers)
    .authenticate(user: "user", password: "pass")
    .responseJSON { response in
        if let data = response.data{
            do{
                let json = try JSON(data: data)
                completion(json)
            } catch {

            }

        }
    }

    debugPrint(request)

URL和身份验证有效,因为查询无需发送参数即可工作。仅当我发送参数alamofire时返回“请求超时”错误。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

对于在那里寻求答案的每个人。发生这种情况的原因是因为GET请求通常没有正文(它与cURL和某些用于测试目的的服务器一起使用)。

答案是,您需要将请求从.get更改为.post。

相关问题