我正在使用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