【发布时间】:2019-01-23 23:28:05
【问题描述】:
我在 Spring Boot 应用程序中有一个 JWT 身份验证。在后端,POST 方法 /login 像这样返回 JSON
{"token":"xxxxxxxxxxxxxxxxxxxxxxxxx"}
我在使用 Android 客户端时遇到了这个问题。我使用改造 2。
在界面中我有:
@POST("/login")
Call<TokenInfo> login(@Body UserCredentials userCredentials);
我的改装客户:
package com.findme.my_app_android;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static Retrofit ourInstance;
public static Retrofit getInstance(){
if(ourInstance==null)
ourInstance = new Retrofit.Builder()
.baseUrl("http://172.20.10.2:8080")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return ourInstance;
}
}
在MainActivity 我使用:
private void login(UserCredentials userCredentials, final View v){
Call<TokenInfo> call = restAPI.login(userCredentials);
call.enqueue(new Callback<TokenInfo>() {
@Override
public void onResponse(Call<TokenInfo> call, Response<TokenInfo> response) {
//retrofit authentication token save
if(response.isSuccessful()){
Log.d("token", response.body().token);
}
openDeviceChoiceActivity();
}
@Override
public void onFailure(Call<TokenInfo> call, Throwable t) {
openAlert(v);
}
});
}
在通话中<...> 我使用TokenInfo 和TokenHolder 如下:
public class TokenInfo {
@SerializedName("token")
@Expose
public String token;
}
或
public class TokenHolder {
private static TokenHolder instance = new TokenHolder();
private String token = null;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public static TokenHolder getInstance() {
return instance;
}
}
不幸的是,我的response.body() 始终是null。有什么问题?
【问题讨论】:
-
检查
response.errorBody()你可能会遇到一些错误 -
okhttp3.ResponseBody$1@c58980e
-
问题可能出在
request。您发送的request是否正确?检查 url 和凭据。同样在TokenInfo的 POJO 类中,为token变量生成getter和setter。
标签: java android spring-boot