AFJSONRequestSerializer 和 AFHTTPRequestSerializer 的区别

Difference between AFJSONRequestSerializer and AFHTTPRequestSerializer

我的请求对 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是类似的问题,但是没有解释为什么是这样的。

谁能解释一下?

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

在您的情况下,听起来您有一个正在等待 JSON 请求的网络服务。当您指定 AFHTTPRequestSerializer 时,请求将不是 JSON 格式并且可能无法理解。并且指定 acceptableContentTypes 不会改变请求本身不是 JSON.

的事实

顺便说一下,Charles or Wireshark 之类的工具对于调试网络代码非常有用,并且有助于诊断这两种请求的差异。如果您使用其中一种工具观看原始 requests/responses,您会发现其中的差异。