java - 通过改造 2 处理动态响应的正确方法

标签 java android authentication jwt retrofit2

假设我有一个 REST API,我可以通过调用以下改造 2 请求来获取图书列表。

public interface AllRecordsFromRequestInterface {
    @GET("books/all")
    Call<List<TrackInfo>> operation(@Header("Authorization") String   authentication_token);
}

和 API 响应:

[
  {
    "id": "1",
    "title": "The Catcher in the Rye",
    "author":"J. D. Salinger"
  },
  {
    "id": "2",
    "title": "The Great Gatsby",
    "author":"F. Scott Fitzgerald"
  }
]

我使用GsonConverterFactory将json转换为模型。这是我的模型类

public class Book{
    private int id;
    private String title;
    private String author;
}

我正在使用身份验证 token 向自己授权 API,正如我的请求中所见。有时,由于 token 过期或其他原因,会收到其他响应而不是上述响应。例如:

{
    "status": "error",
    "message": "Expired token"
}

改造 2 中处理动态响应(具有已知结构)的正确方法是什么?

最佳答案

您有多种选择:

1-更改您的 API:(这是标准的)

对每个响应进行这样的更改,如果用户身份验证失败,则将结果保留为空,或者如果身份验证成功,则将列表放入结果中。

{
"status" : "error/success"
"message" : ...
"result" : ....
}

2-您可以提供要改造的对象类型,响应成功后,您可以使用“实例”语法将其转换为您的模型之一。

public interface AllRecordsFromRequestInterface {
@GET("books/all")
Call<Object> operation(@Header("Authorization") String authentication_token);
}

关于java - 通过改造 2 处理动态响应的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42030665/

相关文章:

android - Android 上的 res/values/public.xml 文件有什么用?

具有基本身份验证功能的 Apache 反向代理

java - 在没有测试框架的情况下使用 Selenium 2?

java - Singleton 类中的方法是线程安全的吗?

android - 改善重型布局的加载时间

android - 在 Android 中通过 USB 进行音频输入

ios - ADAL iOS 静默登录抛出错误

authentication - Symfony2 OAuth2 登录陷入无限重定向循环

java - 查找/迭代 Android CustomListView,以查找选定的复选框

java - JSch : channel never closed or EOF