SerializedName 注释似乎在 Moshi 中不起作用
Posted
技术标签:
【中文标题】SerializedName 注释似乎在 Moshi 中不起作用【英文标题】:SerializedName annotation doesn't seem to work in Moshi 【发布时间】:2018-06-02 11:31:38 【问题描述】:所以我正在尝试使用 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,我确定它会将 this 作为响应返回。
"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 不起作用?
【问题讨论】:
【参考方案1】:@SerializedName("accessToken")
是 Gson
应该是
@Json(name="access_token")
【讨论】:
以上是关于SerializedName 注释似乎在 Moshi 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章