AFJSONRequestSerializer和AFHTTPRequestSerializer之间的区别

时间:2016-06-08 13:38:47

标签: ios swift afnetworking

我的请求适用于AFJSONRequestSerializer并且不适用于AFHTTPRequestSerializer的原因是什么?

我已经设置了

responseSerializer.acceptableContentTypes?.insert("application/json")

代表AFHTTPRequestSerializer并且它不起作用,但应该。

我只是发送简单的字典:

{
    "approval_required" = 1;
    birthdate = "2016-03-11";
    gender = male;
    name = Bartolo;
    password = password1234;
    username = "super user";
}

Here是类似的问题,但没有解释为什么就是这样。

任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

acceptableContentTypes与请求的格式几乎没有关系,即它是HTTP请求还是JSON请求。请求序列化程序的基本职责是以指定的格式创建请求。因此,requestSerializer的选择决定了您是创建HTTP请求(例如Content-Type application/x-www-form-urlencoded)还是JSON请求(例如Content-Type application/json )。 acceptableContentTypes仅允许请求指定您的应用将接受响应的格式。 (并且,坦率地说,你不应该指定acceptableContentTypes,而只是使用正确的responseSerializer。但是请求格式和接受的响应格式是两个完全不同的东西。事实上,拥有一个只接受HTTP请求的Web服务并且只提供JSON响应的情况并不少见。

在您的情况下,听起来您有一个期待JSON请求的Web服务。指定AFHTTPRequestSerializer时,请求将不会采用JSON格式,并且可能无法理解。并且指定acceptableContentTypes并不会改变请求本身不是JSON的事实。

顺便说一下,像CharlesWireshark这样的工具对于调试网络代码非常有用,并且在诊断这两类请求的差异时会很有启发性。如果您使用这些工具之一来观察原始请求/响应,那么差异就会突然出现。