我正在使用Retrofit来实现Rest Client,并且在尝试将响应主体转换为模型对象时遇到了一些麻烦。
我的界面中有以下内容:
@POST("/users")
void createUser(@Body RegisterUserToken token, Callback<User> callback);
我的User
课程基本上是一个POJO:
public class User {
private int id;
private String username;
private String email;
private String language;
// getters and setters...
}
这就是我使用Rest Client的方式:
restClient.createUser(token, new Callback<User>() {
@Override
public void success(User user, Response response) {
// ...problem is here, with the user object
}
@Override
public void failure(RetrofitError error) {
// ...
}
});
我遇到的问题是响应正文未转换为User
对象。我很确定问题是服务器正在返回:
{"user":{"id":13,"username":"john","email":"john@gmail.com","language":"eng"}}
而不仅仅是:
{"id":13,"username":"john","email":"john@gmail.com","language":"eng"}
鉴于我无法真正修改服务器代码,如何自定义Retrofit / GSON以正确地将此响应主体转换为我的User对象?
答案 0 :(得分:8)
像这样更改POJO类:
public static class User {
UserData user;
}
public static class UserData {
private int id;
private String username;
private String email;
private String language;
}
答案 1 :(得分:1)
尝试使用Map<String,User>
而非User
。要获取实际的User
对象,您可以使用地图上的“user”键访问User
对象。
例如:
@POST("/users")
void createUser(@Body RegisterUserToken token, Callback<Map<String, User>> callback);
restClient.createUser(token, new Callback<Map<String, User>>() {
@Override
public void success(Map<String, User> map, Response response) {
User user = map.get("user");
}
@Override
public void failure(RetrofitError error) {
// ...
}
});
}
答案 2 :(得分:0)
GSON无法解析对象,因为你没有获得root(用户)对象......在这里你会找到你的答案https://stackoverflow.com/a/25505032/761668
答案 3 :(得分:0)
您可以使用Volley库进行休息API调用,以便轻松自定义响应。