通过 Swift Alamofire 访问时,JHipster Heroku Oauth2 应用程序出现 500 内部服务器错误
500 Internal Server Error on JHipster Heroku Oauth2 App when accessing via Swift Alamofire
我正在尝试通过 IOS Swift 应用程序访问我上传到 Heroku 的 JHipster 生成的 API。 JHipster 应用程序使用 OAuth2 进行保护。基本上我想实现一个注册功能,我在 IOS 应用程序中提供凭据(电子邮件、登录名和密码),然后调用 JHipster 应用程序上的 /api/register
路径来注册该用户。但是当我发出 Swift Alamofire 请求时,它在尝试调用 /api/register
.
时给了我一个状态码 500
我在 Heroku 的 JHipster 应用:
https://j-hipster-test-apiios.herokuapp.com
我的 Swift Alamofire 请求:
class RegisterViewController: UIViewController {
let parameters: Parameters = [
"login": "Hello",
"password": "World",
"email": "Test@googlemail.com"
]
@IBAction func register(_ sender: UIButton) {
let sessionManager = SessionManager()
sessionManager.request("https://j-hipster-test-apiios.herokuapp.com/api/register", method: .post, parameters: parameters).validate().responseJSON { response in
print("----------------------------")
print(response)
print("----------------------------")
sessionManager.session.invalidateAndCancel()
}
}
我的Xcode日志(responseValidationFailed错误是请求后的.validate()方法导致的,因为它期望状态码在200到299之间):
FAILURE:
responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(500))
我的 Heroku 日志:
2016-11-04T17:38:36.148902+00:00 heroku[router]: at=info method=POST path="/api/register"
host=j-hipster-test-apiios.herokuapp.com request_id=7a1e1345-a8a5-43f2-abbc-4805037a47ef
fwd="93.210.40.139" dyno=web.1 connect=0ms service=13ms status=500 bytes=317
所以主要问题是,为什么我在调用 JHipster api 的 /api/register
路径时得到 500 状态码?
提前致谢!
我终于解决了这个问题。这不是 JHipster 问题,而是 Alamofire 解析问题。我总是使用无效的 json 数据发出请求,因为我没有在我的 Swift 代码中验证我的凭据字典。如果我用 JSONSerialization.data(withJSONObject: parameters)
序列化我的 json 数据,我就可以注册一个帐户。为了完整起见,这是我的解决方案:
class RegisterViewController: UIViewController {
@IBAction func register(_ sender: UIButton) {
let url = NSURL(string: "https://j-hipster-test-apiios.herokuapp.com/api/register")
var request = URLRequest(url: url as! URL)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let parameters: Parameters = [
"activated": true,
"authorities": [ "ROLE_USER" ],
"createdBy": "TestName",
"createdDate": "2016-11-04T20:42:20.301Z",
"login": "Hello",
"password": "World",
"email": "Test@googlemail.com"
"firstName": "TestName",
"id": 0,
"langKey": "en",
"lastModifiedBy": "TestName",
"lastModifiedDate": "2016-11-04T20:42:20.302Z",
"lastName": "TestName",
]
request.httpBody = try! JSONSerialization.data(withJSONObject: parameters)
let sessionManager = SessionManager()
//self.alamofireManager = sessionManager
sessionManager.request(request).responseJSON { response in
switch response.response!.statusCode {
case 201: print("Created")
case 400: print("Username already in use")
case 500: print("Error!")
default: print("Error!")
}
sessionManager.session.invalidateAndCancel()
}
}
}
我正在尝试通过 IOS Swift 应用程序访问我上传到 Heroku 的 JHipster 生成的 API。 JHipster 应用程序使用 OAuth2 进行保护。基本上我想实现一个注册功能,我在 IOS 应用程序中提供凭据(电子邮件、登录名和密码),然后调用 JHipster 应用程序上的 /api/register
路径来注册该用户。但是当我发出 Swift Alamofire 请求时,它在尝试调用 /api/register
.
我在 Heroku 的 JHipster 应用: https://j-hipster-test-apiios.herokuapp.com
我的 Swift Alamofire 请求:
class RegisterViewController: UIViewController {
let parameters: Parameters = [
"login": "Hello",
"password": "World",
"email": "Test@googlemail.com"
]
@IBAction func register(_ sender: UIButton) {
let sessionManager = SessionManager()
sessionManager.request("https://j-hipster-test-apiios.herokuapp.com/api/register", method: .post, parameters: parameters).validate().responseJSON { response in
print("----------------------------")
print(response)
print("----------------------------")
sessionManager.session.invalidateAndCancel()
}
}
我的Xcode日志(responseValidationFailed错误是请求后的.validate()方法导致的,因为它期望状态码在200到299之间):
FAILURE:
responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(500))
我的 Heroku 日志:
2016-11-04T17:38:36.148902+00:00 heroku[router]: at=info method=POST path="/api/register"
host=j-hipster-test-apiios.herokuapp.com request_id=7a1e1345-a8a5-43f2-abbc-4805037a47ef
fwd="93.210.40.139" dyno=web.1 connect=0ms service=13ms status=500 bytes=317
所以主要问题是,为什么我在调用 JHipster api 的 /api/register
路径时得到 500 状态码?
提前致谢!
我终于解决了这个问题。这不是 JHipster 问题,而是 Alamofire 解析问题。我总是使用无效的 json 数据发出请求,因为我没有在我的 Swift 代码中验证我的凭据字典。如果我用 JSONSerialization.data(withJSONObject: parameters)
序列化我的 json 数据,我就可以注册一个帐户。为了完整起见,这是我的解决方案:
class RegisterViewController: UIViewController {
@IBAction func register(_ sender: UIButton) {
let url = NSURL(string: "https://j-hipster-test-apiios.herokuapp.com/api/register")
var request = URLRequest(url: url as! URL)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let parameters: Parameters = [
"activated": true,
"authorities": [ "ROLE_USER" ],
"createdBy": "TestName",
"createdDate": "2016-11-04T20:42:20.301Z",
"login": "Hello",
"password": "World",
"email": "Test@googlemail.com"
"firstName": "TestName",
"id": 0,
"langKey": "en",
"lastModifiedBy": "TestName",
"lastModifiedDate": "2016-11-04T20:42:20.302Z",
"lastName": "TestName",
]
request.httpBody = try! JSONSerialization.data(withJSONObject: parameters)
let sessionManager = SessionManager()
//self.alamofireManager = sessionManager
sessionManager.request(request).responseJSON { response in
switch response.response!.statusCode {
case 201: print("Created")
case 400: print("Username already in use")
case 500: print("Error!")
default: print("Error!")
}
sessionManager.session.invalidateAndCancel()
}
}
}