好的,我有一个返回包含两个字段的 json 的 API
public interface AuthClient {
@Headers({"Content-Type: application/json", "Accept: application/json", "deviceType: android"})
@POST("api/v3.2/auth")
Call<AuthResp> userLogin(@Body String body);
}
当我使用此 AuthResp 调用时,代表 json 响应改造的模型类给我错误代码 400 和错误消息 :: {"errors":"(not (map?a-java.lang.String))"}
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://172.16.10.196:3000/")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(OkHttpClientProvider.getInstance().getClient())
.build();
String json1=new Gson().toJson(new User(8,"123456789"));
Call<AuthResp> call=retrofit.create(AuthClient.class).userLogin(json1);
call.enqueue(new Callback<AuthResp>() {
@Override
public void onResponse(Call<AuthResp> call, Response<AuthResp> response) {
try {
if(response.isSuccessful()) {
Log.d("Response Success","True");
Log.d("Response", response.body().refreshToken);
}
else{
Log.d("Response Not Success",response.code()+""+response.errorBody().string());
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<AuthResp> call, Throwable t) {
Log.d("Response","Failed" +t.getMessage());
}
});
}
我确信没有缺少标头或错误的参数,因为如果我使用 ResponseBody 进行调用,然后使用 Gson 将字符串转换为 AuthResp,它就像一个魅力。
使用的改装版本 ::
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.+
implementation 'com.squareup.retrofit2:converter-scalars:2.+'
implementation 'com.squareup.retrofit2:converter-gson:2.+'
AuthResp 类
public class AuthResp {
public String token;
public String refreshToken;
public AuthResp(){
}
public AuthResp(String token,String refreshToken){
this.token=token;
this.refreshToken=refreshToken;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
}
来自服务器的响应
{
"token": "some string",
"refreshToken": "some string"
}
谁能告诉我可能是什么问题?
添加标量转换器工厂
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://172.16.10.196:3000/")
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(OkHttpClientProvider.getInstance().getClient())
.build();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句