2016-11-04 18 views
1

HeriftでアップロードしたJHipsterで生成されたAPIにアクセスしようとしています。 JHipsterアプリはOAuth2で保護されています。基本的に私はIOSアプリケーションで資格情報(電子メール、ログイン、パスワード)を提供し、このユーザーを登録するためにJHipsterアプリの/api/registerパスを呼び出す登録機能を実装したいと考えています。しかし、Swift Alamofireリクエストを行うと、/api/registerに電話しようとすると、ステータスコード500が返されます。500 JHipster Heroku Oauth2アプリケーションの内部サーバーエラーSwift Alamofire経由でアクセスする場合

マイJHipster Herokuのにアプリ: https://j-hipster-test-apiios.herokuapp.com

マイスウィフト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 

したがって、私のJHipster APIの/api/registerパスを呼び出すと、500ステータスコードが表示されるのはなぜですか?

ありがとうございます!

+0

エラー500が表示された場合、あなたのjhipsterアプリに例外がスローされたことを意味します。正しいログは見ていないと思います。また、Herokuに展開されていないAPIをローカルで実行しても機能しますか? –

+0

JHipsterで提供されているクライアントアプリケーションを使用しているときにレジスタの機能はうまく動作しますが、curlまたはSwiftのリクエストを使用すると、ステータスコード500と '{" message ":" error.internalServerError "、" description ":" Internal server error "、" fieldErrors ":null}'を返します。 –

+0

これをdevプロファイルまたはELKのようなログ集約サービスで実行して、例外を取得します。または、例外翻訳者サービスを操作して、 "Internal server error"の代わりにerrorVMにメッセージを入れてください。 –

答えて

0

最後に私はこの問題を解決しました。これはJHipsterの問題ではなく、Alamofireの解析問題です。私はSwiftコードで自分の資格情報の辞書を検証しなかったので、私はいつも無効なjsonデータでリクエストしました。 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": "[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..Cudu api/registerを呼び出すときに同じエラーが発生したため、 retrofit.Itsを使用してアンドロイドでは、jhipsterアプリケーションでも作業していません。 – rcde0

+0

私の間違いは、JSONデータが有効ではないということでした。だから私はデータを有効なフォーマットに変換しなければならなかった。あなたは同じ問題に取り組んでいるこの質問をAndroidで見たことがありますか:http://stackoverflow.com/a/19373146/3561941? –

+0

それは別の問題だった。それはelasticsearch.Anyways Thanx Tobiasに起因した。 – rcde0

関連する問題