webservice的输出没有使用alamofire快速提供所需的json

Posted

技术标签:

【中文标题】webservice的输出没有使用alamofire快速提供所需的json【英文标题】:the output of webservice is not giving the required json in swift using alamofire 【发布时间】:2018-05-22 11:00:19 【问题描述】:

1)

我是使用 alamofire 的新手。这是我尝试使用 alamofire 来检查我错在哪里的 web 服务。我在 loginviewcontroller.swift 中创建了一个登录 web 服务,如下所示

let url="http://192.169.201.32:9000//users/authenticate"

        @IBAction func DoLogin(_ sender: AnyObject) 
            Alamofire.request(url, method: .post, parameters:["username":"andrews","password":"admin2"], encoding: URLEncoding.default)
                .responseJSON  response in
                    print("abcsign in")
                    print(response)
                    print("abcsign in3")
                    print(response.result)
                    //to get status code
                    if let status = response.response?.statusCode 
                        switch(status)
                        case 201:
                            print("example success")
                        default:
                            print("error with response status: \(status)")
                        
                    
                    //to get JSON return value
                    if let result = response.result.value 
                        let JSON = result as! NSDictionary
                        print("abcsign in 2")
                        print(JSON)

                    

            

            if(login_button.titleLabel?.text == "Logout")
            
                let preferences = UserDefaults.standard
                preferences.removeObject(forKey: "session")

                LoginToDo()
            
            else
                login_now(username:username_input.text!, password: password_input.text!)
            

        

打印(响应)

失败

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailu>reReason.jsonSerializationFailed(错误 Domain=NSCocoaErrorDomain Code=3840 "字符周围的值无效 2." UserInfo=NSDebugDescription=字符 2.))

打印(response.result)

失败

error with response status: 404

2)

第二个signUpviewcontroller.swift连接signUp视图控制器。在signUpViewController.swift中singUp webservice的代码如下

  let url="http://192.169.201.32:9000//patient/signUp"

    @IBAction func signUpButtonWasPressed(_ sender: Any) 
        Alamofire.request(url, method: .post, parameters:["dob":DateOfBirthTextFeild.text ,
                                                          "email":emailIdTextField.text ,
                                                          "firstName":FirstNameTextField.text ,
                                                          "gender":genderTextField.text ,
                                                          "lastName":LastNameTextField.text ,
                                                          "middleName":MiddleNameTextField.text ,
                                                          "password":passwordTextField.text ,    //password must be 8 char long
            "ssn":ssnTextField.text], encoding: URLEncoding.default)
            .responseJSON  response in
                print("abcsig up ")
                print(response)
                print("abcsign up 3")
                print(response.result)
                //to get status code
                if let status = response.response?.statusCode 
                    switch(status)
                    case 201:
                        print("example success")
                    default:
                        print("error with response status: \(status)")
                    
                
                //to get JSON return value
                if let result = response.result.value 
                    let JSON = result as! NSDictionary
                    print("abcsign up in 2")
                    print(JSON)

                

        
        

打印(响应)

失败

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailu>reReason.jsonSerializationFailed(错误

Domain=NSCocoaErrorDomain Code=3840 "字符周围的值无效 2." UserInfo=NSDebugDescription=字符 2.))

打印(response.result)

响应状态错误:404

如何获得有效的 json 响应?

您可以从此链接下载项目https://drive.google.com/file/d/1Q__ydaQ7o0fKcFHdq6ymkxh52IEf7hMK/view?usp=sharing 在 postman 上,api 显示了所需的 json 输出。

注册:

image1

image2

登录:

image3

image4

在body中提供参数。您可以添加将 json url 请求转换为 post 的 json 参数。在下面的选项卡中选择 body 通过选择 raw 将参数放在这里。

【问题讨论】:

***.com/questions/46970997/…的可能重复 使用JSONEncoding,不要使用//,请求url中只需要一个/ 【参考方案1】:

看了你分享的截图,我发现API调用有2个问题。

1) 将编码从URLEncoding 更改为JSONEncoding

2) 通过避免在请求中使用双 // 来更新您的网址


执行以下更改:

    Alamofire.request(url,
                      method: .post,
                      parameters:["username":"andrews","password":"admin2"],
                      encoding: URLEncoding.default)

收件人:

    Alamofire.request(url,
                      method: .post,
                      parameters:["username":"andrews","password":"admin2"],
                      encoding: JSONEncoding.default) 

    let parameters = ["dob":"16-08-2017",
                      "email":"ali45324@heurixtics.com",
                      "firstName":"abdul",
                      "gender":"male",
                      "lastName":"hasmi",
                      "middleName":"rauf",
                      "password":"12345678",
                      "ssn":"1235"]
    Alamofire.request(url,
                      method: .post,
                      parameters:parameters,
                      encoding: JSONEncoding.default)

您还需要更正您的请求网址:

let url = "http://192.169.201.32:9000//users/authenticate"
let url = "http://192.169.201.32:9000//patient/signUp"

收件人:

let url = "http://192.169.201.32:9000/users/authenticate"
let url = "http://192.169.201.32:9000/patient/signUp"

【讨论】:

【参考方案2】:

试试这个链接“http://192.169.201.32:9000/users/authenticate”

我认为你有一个额外的/

404 Not Found 表示问题出在链接上 这是一个找不到页面的错误

【讨论】:

以上是关于webservice的输出没有使用alamofire快速提供所需的json的主要内容,如果未能解决你的问题,请参考以下文章

api没有使用alamofire显示序列化的json输出

Swift:JSON 解析未显示在 UILabel 中,但可以使用 Alamofire 在输出窗口中看到

Swift - Alamofire - 解析 JSON

Alamofire 请求为零

是否可以在 Objective-c 项目中使用 Alamofire 的 Swift 文件?

有没有办法配置 Alamofire 不将结果分派到主队列?