Content-Type代表发送的实体数据的数据类型,包括客户端发送的实体数据和服务端返回的实体数据(在response header和request header中都存在)。
常用的Content-Type
- application/json
代表发送的实体数据的数据类型是JSON数据,如:{"title":"test","sub":[1,2,3]} - application/x-www-from-urlencoded
代表发送的实体数据的数据类型是键值对,如: key1=val1&key2=val2
iOS开发中使用AFN设置Content-Type
1.设置发送数据类型
我们在发送请求数据的时候需要告诉服务器我们的数据是什么类型的
(lldb) po manager.requestSerializer
<AFHTTPRequestSerializer: 0x600003124a80>
(lldb)
我们通过打印可以看到AFN默认的requestSerializer是AFHTTPRequestSerializer类型。
我们可以在请求头里设置Content-Type
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
以上代码代表我们发送的请求数据是键值对类型的。(我发现设置为AFHTTPRequestSerializer类型和设置Content-Type为application/x-www-form-urlencoded的效果是一样的)
2.设置接收数据类型
我们还可以使用AFN设置我们可接收的数据类型。
(lldb) po manager.responseSerializer.acceptableContentTypes
{(
"text/javascript",
"application/json",
"text/json"
)}
(lldb)
通过打印可以看到AFN默认能接收是text/javascript、application/json、text/json这三种数据类型,如果服务器给我们返回的是JSON数据类型,那么AFN就能自动帮我们把JSON数据解析下来。
(lldb) po manager.responseSerializer
<AFJSONResponseSerializer: 0x600003036820>
(lldb)
通过打印我们可以看到AFN默认的responseSerializer是AFJSONResponseSerializer类型,即JSON数据类型。而我们如果使用了AFHTTPRequestSerializer那么manager.responseSerializer.acceptableContentTypes就被置为了nil,此时返回的JSON数据是二进制形式的,需要我们自己进行解析。
网友评论