如何在Retrofit中自定义响应体JSON转换?

我正在使用Retrofit来实现Rest Client,在尝试将响应体转换为模型Object时遇到了一些麻烦。

我的界面中有以下内容:

@POST("/users") void createUser(@Body RegisterUserToken token, Callback 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() { @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对象?

像这样更改POJO类:

 public static class User { UserData user; } public static class UserData { private int id; private String username; private String email; private String language; } 

尝试使用Map而不仅仅是User 。 要获取实际的User对象,可以使用地图上的“user”键访问User对象。

例如:

 @POST("/users") void createUser(@Body RegisterUserToken token, Callback> callback); restClient.createUser(token, new Callback>() { @Override public void success(Map map, Response response) { User user = map.get("user"); } @Override public void failure(RetrofitError error) { // ... } }); } 

GSON无法解析对象,因为你没有获得root(用户)对象…在这里你会find你的答案https://stackoverflow.com/a/25505032/761668

您可以使用Volley库进行restAPI调用,您可以在其中轻松自定义响应。