通过 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()
    }

  }

}