Alamofire swift 如何在 POST 请求中保留 JSON 密钥,即使值为 null / nil

Alamofire swift how to keep JSON keys in POST request even if value is null / nil

提问人:Azurlake 提问时间:11/9/2022 更新时间:11/9/2022 访问量:317

问:

我正在将 Alamofire 5.6.2 与以下 JSON 编码器一起使用:

let encoder = JSONParameterEncoder.json()
encoder.encoder.dateEncodingStrategy = .formatted(DateFormatter.standard)
encoder.encoder.keyEncodingStrategy = .convertToSnakeCase

然后在 POST 请求中使用它,如下所示:

let headers: HTTPHeaders = [
        .authorization(bearerToken: token),
        .accept("application/json"),
        .contentType("application/json;charset=UTF-8"),
        .acceptEncoding("utf-8")
    ]
            
    AF.request(path, method: .post, parameters: data, encoder: encoder, headers: headers).validate().responseDecodable(of: R.self, decoder: decoder) { response in
        switch response.result {
            ...
        }

该参数是如下所示的对象:data

struct SampleRequest: Codable {
    var param1: Bool
    var param2: Float?
}

问题是,如果为 nil,则不会将密钥添加到请求正文中。这对我来说是一个问题,因为我的目标端点对不同的更新任务使用相同的请求流,并且它需要知道特定键是否为 nil,以便在后端将其设置为 null,或者它不存在,因此它不应该对它做任何事情。param2

我在正在使用的编码器上找不到任何选项,以便在值为 nil 时保留键。这怎么能实现呢?JSONParameterEncoder.json()

提前致谢

json swift null alamofire

评论

1赞 Larme 11/9/2022
这不是阿拉莫火,而是行为。请参阅 stackoverflow.com/questions/47266862/...Foundation.JSONEncoderEncodable
0赞 Azurlake 11/9/2022
事实上,感谢您指出这一点,我已经在该问题上实现了类似建议的东西,并且它奏效了。请随时将评论移至“适当”(恕我直言)的答案,我会接受的,再次感谢!
1赞 Larme 11/9/2022
这回答了你的问题吗?使用 JSONEncoder 将 nil 值编码为 null

答: 暂无答案