NSURLSession 从 Servlet 获取响应

Posted

技术标签:

【中文标题】NSURLSession 从 Servlet 获取响应【英文标题】:NSURLSession get response from Servlet 【发布时间】:2015-10-26 09:27:43 【问题描述】:

目前,我正在使用 NSURLSession 和 HTTPPost 方法将数据上传到 Java servlet。 java servlet 将解析接收到的数据并将其更新到数据库中。

let dataTest:NSData = dao.readStringFromDb().data
let request = NSMutableURLRequest(URL: NSURL(string: urlSubmit)!)
    request.HTTPMethod = "POST"
    request.addValue("multipart/form-data", forHTTPHeaderField: "Accept")
    request.HTTPBody = dataTest
let session = NSURLSession.sharedSession()
let task    = session.dataTaskWithRequest(request, completionHandler: data, response, error -> Void in
    print("Response: \(response)"))
    task.resume()

在更新过程中(在 Java 中),不同的状态标志会根据不同的条件更新到 DB 中。现在,我的要求是从 Web 服务器返回该状态并在本地显示。

我知道我可以再次使用 HTTPGet 方法,传递键值并获取状态标志。

我正在尝试探索是否有任何回调处理程序可用于 java servlet,例如 javascript 中可用的回调处理程序。

任何建议都会非常有帮助。

问候。

【问题讨论】:

使用相同的 post 方法,您可以从您的 servlet 获得状态响应。 【参考方案1】:

您已经实现了回调来处理响应。

为了得到响应码,你要做的就是:

将响应转换为NSHTTPURLResponse,然后调用statusCode 属性

所以你的代码是:

let task = session.dataTaskWithRequest(request, completionHandler: (data, response ,error ) in
        if let response = response 
            let httpResponse = response as! NSHTTPURLResponse
            print("response code = \(httpResponse.statusCode)")
        
    )
task.resume()

你有一个错误,它在 clouser 内调用 task.resume(),我也修复了它。

别忘了检查错误

【讨论】:

以上是关于NSURLSession 从 Servlet 获取响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSURLSession 时无法调用 didReceiveData

GET 使用 NSURLSession 成功,但使用 AFHTTPSessionManager 失败

NSURLSession,上传任务 - 获取传输的实际字节

AFNetworking、NSURLSession 和 json 响应 (Ronak Sankhala)

使用NSURLSession同步获取数据(通过添加信号量)

获取所有视图控制器中的 NSURLSession 下载进度