当前位置: 首页 > 面试题库 >

使用JSend格式使用Retrofit将JSON响应转换为POJO吗?

谭山
2023-03-14
问题内容

我必须使用使用JSend格式的API 。

长话短说,它使用HTTP状态代码来指示状态,例如:

  • 200就是成功
  • 406未经授权

这很好,因为我可以据此确定我的API请求是否成功。

但:

由于JSend格式是它自己的东西,因此它在响应中还带有一个状态指示器,如下所示:

{
    status : "success",
    data : { "post" : { "id" : 2, "title" : "Another blog post", "body" : "More content" }}
}

因此,它具有一个“状态”字段,该字段还显示API请求是否成功。

问题:

进行了改进以解析对POJO的响应,因此假定响应仅包含Model,并且没有成功指示符,例如这样:(一个后期Model实例)

{ "id" : 2, "title" : "Another blog post", "body" : "More content" }

我的问题是:

有解决方案吗?我是否可以预解析状态指示器,拆分响应的“数据”(模型)部分,并对其进行改造以仅解析该部分?

如果不是这样,我将不得不向每个模型添加“状态”属性,这显然不是一种可行的方法,我不会那样做。

我应该坚持手动解析并使用ResponseBody而不是我的模型吗?

void onResponse(Call<T> call, Response<T> response);对于T类型参数?

因为这样可以使用.string()字符串并将其转换为JSON,然后可以手动解析模型,就像为它们编写解析器一样。

我真的很想使用Retrofit的功能来进行自动解析,因为有了JSend,我根本无法想象这将如何正确完成。

我无法更改API,它将采用这种方式。


问题答案:

这是我的Response课。

public class Response<T> implements Serializable {
private T data;
private String status;

public T getData() {
    return data;
}

public void setData(T data) {
    this.data = data;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

}

这是我的api调用。

Callback<com.shippn.api.models.Response<T>> callback = new Callback<com.shippn.api.models.Response<T>>() {
        @Override
        public void onResponse(Call<com.shippn.api.models.Response<T>> call, Response<com.shippn.api.models.Response<T>> response) {
            checkStatus(response.body());
        }

        @Override
        public void onFailure(Call<com.shippn.api.models.Response<T>> call, Throwable t) {
            fail();
        }
    };
    call.enqueue(callback);

T参数是来自api的数据类型。我的意思是,如果您想获取Post类型为Postinsted的数据T。如果你想得到ArrayList<Post>ArrayList<Post>

如果dataapi响应中的field为空或null,则为Response.datanull或空,则不会引发异常

当您从api获得响应时,请首先检查Response.status它是否“成功”。如果是“成功”
Response,则从中获取数据,如果不是,则执行错误操作。



 类似资料:
  • null 这是很好的,因为我可以确定我的API请求是否成功。 但是: 由于JSend格式有它自己的东西,它在响应时也有一个小的状态指示器,如下所示: 我是否应该坚持手动解析并使用而不是我的模型 对于类型paramter? 因为这样,我可以使用并将字符串转换为JSON,然后我可以手动解析模型,就像为它们编写解析器一样。

  • 我的JSON的格式是: “abc”是变量,“field_1”和“value”是字段名。我希望Java中的一个类以某种格式存储这个JSON,例如: 我的班级。JAVA 我想要我的班级。java,因为将来我可能想在JSON响应中添加更多元数据。这是一个复杂的对象映射,但我不知道我的类应该是什么样子来存储JSON响应。

  • 使用此JSON,自动JSON到POJO严重失败。 请注意,不同请求的项目数量不同。在这里,我将包含两项JSON响应。 这个JSON对象的POJO会是什么样子?

  • 我对Spark SQL很陌生。在执行一项培训任务时,我遇到了以下问题,无法找到答案(以下所有示例都有点愚蠢,但出于演示目的,应该仍然可以)。 我的应用程序读取拼花文件并根据其内容创建数据集: 数据集。show()调用结果: 然后,我将数据集转换为一个新的数据集,其中包含Person类型: 哪里 最后,当我显示数据集的内容时,我希望看到 然而,我明白了 这是toString()方法的结果,而标头是正

  • 问题内容: 我正在将Jersey用于REST WS,并且得到的响应为JSON。 我想将此响应转换为POJO。怎么做 ? 问题答案: 要在Java和JSON之间进行转换,有很多可供选择的API 。 您可以“手动”遍历JSON组件并提取值以填充Java对象,或者可以使用JSON到Java的绑定API来解决许多低级映射问题。

  • 问题内容: 我必须将我们的j2ee应用程序与REST Web服务集成在一起。我想使用JBoss的RestEasy JAX- RS实现。Web服务返回JSON格式的数组。我有这段代码: 我可以将此“响应”对象映射到使用RestEasy吗?谢谢 问题答案: 如果您的JSON提供程序能够转换为适当的实体,那么可以。您在代码中调用的方法具有重载的版本,该版本接受将结果转换为的实体类。由于序列化某些集合的实