所以我试图使用moshi从我的服务器解析一个调用.这是我的回复对象.
public class TokenResponse {
@Serializedname("accesstoken")
public String accesstoken;
public String token_type;
public int expires_in;
public String userName;
public String name;
@Serializedname(".issued")
public String issued;
@Serializedname(".expires")
public String expires;
public String Roles;
}
这是我的端点定义(不是很重要,但无论如何我都会包含它)
public interface ServerService {
@POST("/token")
@FormUrlEncoded
Call<TokenResponse> getToken(@Field("username") String username,@Field("password") String password,@Field("grant_type") String grant_type);
}
这是我用来调用的代码.
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://xxx/")
.addConverterFactory(moshiConverterFactory.create())
.build();
ServerService service = retrofit.create(ServerService.class);
Call<TokenResponse> call = service.getToken("admin@admin.com","password1!","password");
call.enqueue(new Callback<TokenResponse>() {
@Override
public void onResponse(Call<TokenResponse> call,Response<TokenResponse> response) {
if (response.isSuccessful()) {
// tasks available
TextView tv = (TextView)findViewById(R.id.tvToken);
tv.setText(response.body().accesstoken);
} else {
// error response,no access to resource?
}
}
});
在onResponse方法中,我的response.body()始终具有accesstoken,已发布并且过期为null.我得到其他参数的值.使用Android Profiler,我肯定知道它会将此作为响应返回.
{
"access_token":"_xxx","token_type":"bearer","expires_in":1209599,"userName":"xxx","name":"LOURDES RILEY",".issued":"Tue,19 Dec 2017 23:37:06 GMT",".expires":"Tue,02 Jan 2018 23:37:06 GMT","Roles":"[\"Admin\"]"
}
那么我做错了什么?为什么Serializedname不起作用?
解决方法
@Serializedname(“accesstoken”)是Gson
它应该是
@Json(名称= “的access_token”)