当前位置: 首页 > 知识库问答 >
问题:

如何在Alamofire中将body type设置为JSON?

高山
2023-03-14

我正在与来自不同项目的不同人员在线工作,他们负责后端API webservice。通常我在发送和接收JSON方面没有问题,但这次,我似乎无法正确地将JSON发送到服务器。

通常我使用Alamofire来接收和发送JSON消息,通常的调用如下:

let param = populateParamWithDictionary();
let url = "https://www.example.com";

Alamofire.request(.POST, url, parameters: param, headers: nil)
.responseJSON { response in {
  // take care of response here
}

但这一次,我得到了后端程序员要求我使用OAuthV2的项目。假设我已经开发了一个函数,它已经负责获取访问令牌字符串。该函数现在变成如下所示:

let param = populateParamWithDictionary();
let url = "https://www.example.com";
let headers : Dictionary<String, String> = [
        "Content-Type":"application/json",
        "Authorization":"Bearer \(access_token)"
    ];

Alamofire.request(.POST, url, parameters: param, headers: headers)
.responseJSON { response in {
  // take care of response here
}

但结果不是400个错误请求错误。我甚至还试着这样做:

let param = populateParamWithDictionary();
let url = "https://www.example.com";
let headers : Dictionary<String, String> = [
        "Content-Type":"application/json",
        "Authorization":"Bearer \(access_token)"
    ];

Alamofire.request(.POST, url, parameters: param, encoding: ParameterEncoding.JSON, headers: headers)
.responseJSON { response in {
  // take care of response here
}

但结果更糟糕。这是我打印回复时得到的。

失败:错误域=NSURLErrorDomain Code=-1017"无法解析响应"UserInfo={NSUnderlyingError=0x7fbb505788f0{错误域=kCFErrorDomainCFNetwork Code=-1017"(null)"UserInfo={_kCFStreamErrorCodeKey=-1,_kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://lfapp.learnflux.net/v1/me, NSErrorFailingURLKey=http://lfapp.learnflux.net/v1/me,_kCFStreamErrorDomainKey=4,_kCFStreamErrorCodeKey=-1,无法解析响应

但是,如果我使用REST客户端,则请求可以工作,方法是将头设置为具有身份验证和内容类型,并将参数作为普通内容写入,例如在正文内容中的普通API中。

我怎样才能解决这个问题?

编辑:具有访问令牌的部分已清除。访问令牌可以工作。如果API不需要任何参数,我可以成功地调用API(可能是因为在服务器上,代码根本不需要检查或验证主体,因为它不需要任何参数,因此不会出现错误)。问题是当我发出需要任何参数的请求时。

共有1个答案

梁渊
2023-03-14

您所遇到的错误可能是由于编码:ParameterEn编码。请求中的JSON。尝试将其更改为编码:。URLEncodedInURL。如果这对您没有帮助,请将您的参数添加到问题中,如果您请求获取令牌,请执行以下操作:

if let access_token = json["access_token"]!{
     // Make the request here when you know that you have your token
}
 类似资料:
  • 问题内容: 在第一种情况下 ,它会抛出 NSURLErrorDomain (正确设置了超时): 在第二种情况下 ,超时不会被替换,而是仍设置为60秒。 我在ios 10.1中运行 我的代码:( 不起作用) 解决了Alamofire github线程: Alamofire 4.3.0设置超时引发NSURLErrorDomain错误#1931 问题答案: 基于@ kamal-thakur响应。 迅捷3

  • 问题内容: 我正在使用Jenkins Multibranch Pipelines实施构建工作。最后阶段是将构建输出上传到Artifactory。 通过界面配置独立作业时,有一个选项“从Artifactory丢弃旧版本”,这使我只能保留与“要保留的最大版本数”设置中指定的相同数量的版本。 我的Jenkins文件中的上传阶段配置如下:https ://wiki.jenkins- ci.org/disp

  • 本文向大家介绍如何在JavaFX中将动作设置为RadioButton?,包括了如何在JavaFX中将动作设置为RadioButton?的使用技巧和注意事项,需要的朋友参考一下 单选按钮是一种圆形的按钮。它有两种状态,选择和取消选择。通常,单选按钮使用切换组进行分组,您只能在其中选择一个。 您可以通过实例化javafx.scene.control.RadioButton类(它是ToggleButto

  • 问题内容: 我尝试过这种方式,但是它没有改变吗? 问题答案: 最好使用.png文件;.ico是Windows特定的。最好不要使用文件,而是使用类资源(可以包装在应用程序的jar中)。 尽管您甚至可能考虑将setIconImages用于多种尺寸的图标。

  • 我使用的是Spring Kafka 2.2.7,我已经将配置为,并使用消费消息,一切都按预期运行。 我想添加一个来记录所有消耗的消息,但发现很难配置它。留档指出可以在容器上设置RecordInterceptor,但我不确定如何获取容器的实例。 从版本2.2.7开始,您可以向侦听器容器添加RecordInterceptor;它将在调用允许检查或修改记录的侦听器之前被调用。 我查阅了Spring文档,

  • 问题内容: 谁能建议我如何将.TIF格式的图像存储到该图像并将其添加到列表模型?我试过了,但是给了我。 在这里,我编辑了代码,这是我的错误msg 异常,位于ListImage1.main(ListImage1.java:48)的javax.swing.ImageIcon。(ImageIcon.java:228)的线程“ main”中java.lang.NullPointerException 问题