Skip to main content
 首页 » 操作系统

objective-c之OSX之即使设置了 JSON 序列化器,AFNetworking 也发送文本

2024年01月01日36JustinYoung

我对 AFNetworking 和 AFJSONRequestSerializer 有疑问。我尝试访问 API,请求包含 text/plain header 。这是我的代码:

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) 
            } 
    } 

你知道这个问题吗?

请您参考如下方法:

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

Request failed: unacceptable content-type: text/html

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

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

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

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