2016-11-04 7 views
1

Я пытаюсь получить доступ к API, созданный JHipster, который я загрузил на Heroku, через приложение IOS Swift. Приложение JHipster защищено OAuth2. В основном я хочу реализовать функцию регистрации, когда я предоставляю учетные данные (адрес электронной почты, логин и пароль) в приложении IOS, а затем вызываю путь /api/register в приложении JHipster для регистрации этого пользователя. Но когда я делаю запрос Swift Alamofire, он дает мне код статуса 500 при попытке позвонить /api/register.500 Внутренняя ошибка сервера в приложении JHipster Heroku Oauth2 при доступе через Swift Alamofire

Мой JHipster приложение на Heroku: https://j-hipster-test-apiios.herokuapp.com

My Swift Alamofire запрос:

class RegisterViewController: UIViewController { 

let parameters: Parameters = [ 
    "login": "Hello", 
    "password": "World", 
    "email": "[email protected]" 
] 


@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 

Итак, главный вопрос: почему я получаю код состояния 500, когда я вызываю путь /api/register моего Jiipster api?

Заранее благодарен!

+0

Если вы получили сообщение об ошибке 500, это означает, что у вас есть исключение, заброшенное в вашем приложении jhipster, поэтому я думаю, что вы не смотрите на правильный журнал. Также он работает, когда вы запускаете свой api локально, не развернутый на Heroku? –

+0

Функциональность регистра работает нормально при использовании клиентского приложения JHipster, но при использовании запроса curl или Swift я получаю код состояния 500 и: '{" message ":" error.internalServerError "," description ":" Внутренняя ошибка сервера "," fieldErrors ": null}', также при запросе его локально. –

+0

запустите это с помощью профиля профиля или служб агрегирования журналов, таких как ELK, чтобы получить исключение. Или манипулируйте услугами переводчика исключений, чтобы поместить сообщение в errorVM вместо «Internal server error», как сейчас –

ответ

0

И наконец, я решил проблему. Это не проблема JHipster, а проблема синтаксического анализа Alamofire. Я всегда делал запросы с недействительными данными json, потому что я не проверял свои учетные данные в моем Swift-коде. Если я сериализую свои данные json с помощью JSONSerialization.data(withJSONObject: parameters), я могу зарегистрировать учетную запись. Для полноты здесь мое решение:

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": "[email protected]" 
     "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() 
    } 

    } 

} 
+0

@ Tobias..Cud u, пожалуйста, помогите мне с некоторой дополнительной информацией, поскольку я получаю такую ​​же ошибку при вызове api/register в android, используя retrofit.Its даже не работает в приложении jhipster. – rcde0

+0

Моя ошибка заключалась в том, что данные JSON недействительны. Поэтому мне пришлось преобразовать данные в допустимый формат. Вы когда-нибудь рассматривали этот вопрос, который решает ту же проблему, но в Android: http://stackoverflow.com/a/19373146/3561941? –

+0

Это была другая проблема. Это было связано с elasticsearch.Anyways Thanx Tobias. – rcde0