2016-10-02 12 views
0

私は、Retrofit 1.9を使用して、expressとAndroidのネイティブアプリを使用してnode.jsサーバーで作業しています。 true/falseの回答のみをクライアントに返すログインAPIについては、JSONを引き続き使用する必要がありますか?サーバーは常にHTTPレスポンスとしてJSONオブジェクトを送信する必要がありますか?

私はそれを見るように、サーバが唯一のステータスコード応答を送信することがあります。

if(isLegal) { 
    res.sendStatus(200); 
    dbConnector.updateUser(token); 
} 
else{ 
    console.log('Token is not legal'); 
    res.sendStatus(403); 
} 

しかし、レトロフィットフレームワークは、私は私がJSONオブジェクトを送信しなければならないと思わせるJSONへの応答を変換しようとします答えは、それは奇妙に見えますが。

マイ改造restClient:

public class RestClient { 
private static final String URL = SessionDetails.getInstance().serverAddress; 

private retrofit.RestAdapter restAdapter; 
private ServerAPI serverAPI; 

public RestClient() { 

    restAdapter = new retrofit.RestAdapter.Builder() 
      .setEndpoint(URL) 
      .setLogLevel(retrofit.RestAdapter.LogLevel.FULL) 
      .build(); 

    serverAPI = restAdapter.create(ServerAPI.class); 
} 

public ServerAPI getService() { 
    return serverAPI; 
} 

}

と使用方法:

  restClient.getService().login(token.getToken(), token.getUserId(), new Callback<Void>() { 
      @Override 
      public void success(Void aVoid, Response response) { 
       Log.d("Chooser", "Successful login on server."); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       error.printStackTrace(); 
       Log.d("Chooser", "Login failed on server."); 
      } 
     }); 

それがあるとして、それを使用するには、次のエラーで結果:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING

があります。多くのトピックこの問題に関しては正しいが、より良い方法については何の答えもない。

これらのケースで最高の実装についての任意のアイデア?あなたのHTTP応答で、空のボディを送信

+1

レトロフィットは、JSONライブラリとしてGsonを使用し、それがサーバから受信された任意のオブジェクトを解析しようとします。 – nurgasemetey

+0

これは確かです。しかし、JSON以外のレスポンスの場合、例外がスローされます。 –

+0

このシナリオでは簡単なクラスを作成できます。多分、将来、このログインプロセスが拡張されるでしょう。 Bobcat100 @ – nurgasemetey

答えて

1

は完全に合法であり、いくつかのクライアントは、応答状態を気にするが、いくつかのクライアントはとても体が痛いことはありません応答を送信取得し、時には有用である可能性が期待しています。

あなたはHTTP応答ステータスに加えて、JSON応答を含めることができます。

// Express 4.x: 
res.status(403).json({error: 'Token is not legal'}); 

// Express 3.x: 
res.json(403, {error: 'Token is not legal'}); 

このようなエラーメッセージがクライアントの開発に非常に役立ちます。不正なトークン、期限切れのトークン、有効期限切れのトークンではなく、一部の特権を持っていない間違ったユーザーのために、403を得ることができます。HTTP応答コードに加えて特定のエラーメッセージを追加すると、間違っていて、クライアント側のコードでより良いエラーメッセージを表示することができます。

はまた、truefalseも有効なJSONであることに注意してください。

関連する問題