OSX - AFNetworking 即使设置了 JSON 序列化程序也发送文本
OSX - AFNetworking sending text even with JSON Serializer set
我对 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
如果您明白了,那并不是告诉您请求的内容类型不可接受,而是因为响应 是text/html
,所以请求失败了。这是一个非常常见的问题:如果尝试创建 JSON 响应的服务器代码由于某种原因失败,有时错误消息不是 JSON,而是 HTML。
我建议在 POST
方法的 failure
块中添加以下内容,以便查看此 text/html
响应是什么:
if operation.responseData != nil {
println(NSString(data: operation.responseData, encoding: NSUTF8StringEncoding))
}
这样,如果您从服务器收到文本错误消息(例如,请求格式错误或您有什么问题),您将能够阅读您返回的 HTML 响应。
我对 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
如果您明白了,那并不是告诉您请求的内容类型不可接受,而是因为响应 是text/html
,所以请求失败了。这是一个非常常见的问题:如果尝试创建 JSON 响应的服务器代码由于某种原因失败,有时错误消息不是 JSON,而是 HTML。
我建议在 POST
方法的 failure
块中添加以下内容,以便查看此 text/html
响应是什么:
if operation.responseData != nil {
println(NSString(data: operation.responseData, encoding: NSUTF8StringEncoding))
}
这样,如果您从服务器收到文本错误消息(例如,请求格式错误或您有什么问题),您将能够阅读您返回的 HTML 响应。