私は、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応答で、空のボディを送信
レトロフィットは、JSONライブラリとしてGsonを使用し、それがサーバから受信された任意のオブジェクトを解析しようとします。 – nurgasemetey
これは確かです。しかし、JSON以外のレスポンスの場合、例外がスローされます。 –
このシナリオでは簡単なクラスを作成できます。多分、将来、このログインプロセスが拡張されるでしょう。 Bobcat100 @ – nurgasemetey