我的请求适用于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是类似的问题,但没有解释为什么就是这样。
任何人都可以解释一下吗?
答案 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的事实。
顺便说一下,像Charles或Wireshark这样的工具对于调试网络代码非常有用,并且在诊断这两类请求的差异时会很有启发性。如果您使用这些工具之一来观察原始请求/响应,那么差异就会突然出现。