【问题标题】:OSX - AFNetworking sending text even with JSON Serializer setOSX - 即使设置了 JSON 序列化器,AFNetworking 也会发送文本
【发布时间】:2015-03-04 00:22:24
【问题描述】:

我对@9​​87654321@ 和AFJSONRequestSerializer 有疑问。我尝试访问 API,请求包含 text/plain 标头。这是我的代码:

class BaseService {
    var manager: AFHTTPRequestOperationManager!

    init() {
        manager = AFHTTPRequestOperationManager()
        manager.responseSerializer = AFJSONResponseSerializer()
        manager.requestSerializer = AFJSONRequestSerializer(writingOptions: NSJSONWritingOptions.allZeros)
    }
}

class UserService: BaseService {
    func startNewEntry(name: String) {
        let params = [
            "time_entry": [
                "description": name,
                "created_with": "fooBar"
            ]
        ]

        manager.POST(
            "endpoint",
            parameters: params,
            success: { (operation, response) -> Void in

                let json = JSON(response)

                println("OK")
                println(json)

                Context.shared.entries.getFromJSON(json)

            }) { (operation, error) -> Void in
                println("-- ERROR --")
                println(operation)
                println(error)
            }
    }

你知道这个问题吗?

【问题讨论】:

  • 如果你没有解释问题是什么,我们怎么知道问题是什么?

标签: objective-c macos swift afnetworking


【解决方案1】:

不,此代码将创建内容类型为 application/json 的请求。但我想知道您是否可能被一条错误消息误导:

请求失败:不可接受的内容类型:text/html

如果你明白了,那并不是告诉你请求的内容类型不可接受,而是请求失败,因为响应text/html。这是一个非常常见的问题:如果尝试创建 JSON 响应的服务器代码由于某种原因失败,有时错误消息不是 JSON,而是 HTML。

我建议在 POST 方法的 failure 块中添加以下内容,以查看此 text/html 响应是什么:

if operation.responseData != nil {
    println(NSString(data: operation.responseData, encoding: NSUTF8StringEncoding))
}

这样,如果您收到来自服务器的文本错误消息(例如,请求格式错误或您有什么问题),您将能够读取您返回的 HTML 响应。

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多