Alamofire 上传功能打印 responseJSON
Posted
技术标签:
【中文标题】Alamofire 上传功能打印 responseJSON【英文标题】:Alamofire upload function print the responseJSON 【发布时间】:2021-04-15 22:43:51 【问题描述】:这是我的 alamofire 函数...
AF.upload(
multipartFormData: multipartFormData in
multipartFormData.append(imageData, withName: "imagePath" , fileName: "profile-image.png", mimeType: "image/png")
for (key, value) in params
multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
print(multipartFormData.contentLength)
,
to: URLLink, method: .post, headers: headers)
.downloadProgress progress in
print(progress)
.response response in
print(response.result)
.responseJSON(completionHandler: data in
print(data)
)
如何以 JSON 格式打印响应,以便根据提供的信息处理来自服务器的响应?
response.result 和 response.value 不像普通请求函数那样做。
.responseJSON()
不响应来自服务器的响应。打印出来的数据是:
failure(Alamofire.AFError.responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo=NSDebugDescription=Garbage at end.)))
但是,它成功了,图像和数据被发送到服务器/数据库。
【问题讨论】:
使用.responseJSON
试过了。生病把我的代码贴在@Dilan 上面
你需要弄清楚为什么它认为你的 JSON 最后有垃圾,你可能需要从中过滤掉一些东西。
响应 json 可能包含多个对象但未包含在数组中。请与您的后端开发人员联系并获取示例响应。
【参考方案1】:
选项 1
Alamofire 提供开箱即用的 JSON 序列化程序,即 responseJSON()
/// Adds a handler to be called once the request has finished.
///
/// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`.
/// - parameter completionHandler: A closure to be executed once the request has finished.
///
/// - returns: The request.
@discardableResult
public func responseJSON(
queue: DispatchQueue? = nil,
options: JSONSerialization.ReadingOptions = .allowFragments,
completionHandler: @escaping (DownloadResponse<Any>) -> Void)
-> Self
选项 2
response()
是更通用的方法。您可以将响应序列化为您自己的输出类型(JSON、String 等...)。
这是response()
方法的函数头。你可以通过指定responseSerializer
来指定你需要什么样的输出。
/// Adds a handler to be called once the request has finished.
///
/// - parameter queue: The queue on which the completion handler is dispatched.
/// - parameter responseSerializer: The response serializer responsible for serializing the request, response,
/// and data contained in the destination url.
/// - parameter completionHandler: The code to be executed once the request has finished.
///
/// - returns: The request.
@discardableResult
public func response<T: DownloadResponseSerializerProtocol>(
queue: DispatchQueue? = nil,
responseSerializer: T,
completionHandler: @escaping (DownloadResponse<T.SerializedObject>) -> Void)
-> Self
您可以使用此静态方法DownloadRequest.jsonResponseSerializer()
来获取response()
方法中所需的JSON Serializer。
public static func jsonResponseSerializer(
options: JSONSerialization.ReadingOptions = .allowFragments)
-> DownloadResponseSerializer<Any>
【讨论】:
这些将如何使用?以上是关于Alamofire 上传功能打印 responseJSON的主要内容,如果未能解决你的问题,请参考以下文章