Retrofit 2 - 如何在没有 Call 对象的情况下发出请求

Retrofit 2 - How to make request without Call object

我使用改造 2,我有 UserService 和 return 对象调用的剩余方法。 我想调用这些方法,return 只是数据对象。

我有这个:

@GET("users")
Call<List<UserDTO>> getUsers();

但我想要:

@GET("users")
List<UserDTO> getUsers();

我知道在 Retrofit 1.9 中默认情况下这是可能的,但我找不到解决此问题的方法。 我不想每次使用它时都调用方法、执行调用、获取正文并进行 try..catch。

当我从第二个示例调用方法时收到错误:

Could not locate call adapter for java.util.List<>

是否可以在任何适配器中处理这种情况?以及如何去做?

我是这样解决这个问题的:

public class CustomCallAdapter<T> implements CallAdapter<T, T> {

    private Type returnType;

    public CustomCallAdapter(Type returnType) {
        this.returnType = returnType;
    }

    @Override
    public Type responseType() {
        return returnType;
    }

    @Override
    public T adapt(Call<T> call) {
        try {
            return call.execute().body();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static class Factory extends CallAdapter.Factory {

        @Override
        public CallAdapter<?, ?> get(Type returnType, Annotation[] annotations, Retrofit retrofit) {
            return new CustomCallAdapter(returnType);
        }
    }
}