Retrofit 是否支持 json 解析或类似的键路径?

Does Retrofit support keypath on json parsing or something alike?

例如我有 json 看起来像:

{
    "data": [
        {
            "name": "one"
        },
        {
            "name": "two"
        }
    ]
}

例如我有带有字段名称的对象用户。

是否可以编写将数据数组解析为对象 User 的方法?

类似于

Call<List<User>> getUsers(@KeyPath("data"))

现在要做到这一点,我需要创建一个包装器 class 类似

public class UsersWrapper {
    @SerializeName("data")
    public ArrayList<User> users;
}

接下来我将在服役中

public interface Service {
    @GET("users")
    Call<UsersWrapper> getUsers()
}

但我所有的请求都只是响应数据,而不是数组中的变量对象。

在这种情况下,我需要为任何数据请求创建包装器。痛苦:(

?

我会这样做:

全局classWrapper<T>解析整个JSON

public class Wrapper<T> {
    public List<T> data;
}

User解析实际数组;

public class User {
    public String name;
}

然后,API界面:

@GET("/people")
Wrapper<User> getUsers();

然后在 DataSource class 中做这样的事情:

@Override
public List<User> getUsers() {
    Wrapper<User> usersWrapper = myApiInterface.getUsers();
    return usersWrapper.data;
}

Upd1:
另一种解决方案是为 List<User> 类型创建自定义 JsonDeserializer(如描述的 here),通过 registerTypeAdapter 将其注册到您的自定义 Gson 对象,然后您可以反序列化你的 Json 直接变成 List<User>。不过,此解决方案带来了更多的额外代码,潜在的好处对我来说还不清楚。