我正在使用Express和一個Android本機應用程序使用Retrofit 1.9來使用node.js服務器。 對於僅向客戶端返回真/假答案的登錄API,是否仍應使用JSON?服務器應該總是發送一個JSON對象作爲http響應嗎?
在我看來,服務器只發送一個狀態碼響應:
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
有很多話題對這個問題,但沒有確切的答案(或更好的)使用方法。
有關這些情況下的最佳實施的任何想法?
Retrofit使用Gson作爲json庫,它會嘗試解析從服務器接收到的任何對象。 – nurgasemetey
這是肯定的。但是在非JSON響應的情況下,將會拋出異常。 –
您可以爲此場景創建簡單的類。也許將來,這個登錄過程將會延長。 – nurgasemetey