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的主要内容,如果未能解决你的问题,请参考以下文章
Swift:JSON 解析未显示在 UILabel 中,但可以使用 Alamofire 在输出窗口中看到