首页 > 解决方案 > 如何提取 JsonArray 的第一个元素是 Integer 而另一个是 JsonElements?

问题描述

我在一个 Java Spring Boot 项目中,该项目使用 RestTemplates 发出 API 请求。尝试实现分页,使新的 JsonArray 传入的第一个元素是 Integer,其余的是 JsonElements。如果没有分页,传入的 json 值是:

[
    {
        "id":1234,
        "name": null,
        "...":...
    },...
]

这些对象及其 getter 和 setter 正确实现。pd 我不需要传入 jsonelement 的所有属性。

public class WorkListBean extends WorkBean{
    private List<WorkBean> lsWorkBean;
}
public class WorkBean implements Serializable {
    private static final long serialVersionUID = -...L;
    private long id;
    private String name;
}

这会将 WorkListBean[] 返回给客户端并且运行良好。但是随着分页的实现,传入的 json 是这样的:

[
    1,
    {
        "id":1234,
        "name": null
    },...
]

我怎样才能提取数组的第一个整数?

我想也许我可以使用带有 Object Mapper 的 Deserializer 来制作一个拥有 Integer 和 WorkBean 列表或数组的自定义对象。但我对这个条款有点迷茫。任何人都可以确认我指向一个好的观点吗?

提前致谢,

Grettings LaGallinaturuleta

标签: javajsonspring-bootobjectmapper

解决方案


这是一个设计糟糕的架构。尽管在技术上是允许的,但将不同类型的元素放在同一个数组中会使每个客户都受苦。

如果您可以更改正在与之交谈的服务器端,他们应该使用更用户友好的模式,如下所示:

{
    "pageNumber":0,
    "size":5,
    "totalPages":4,
    "content":[
        {"studentId":"1","name":"Bryan","gender":"Male","age":20},
        {"studentId":"2","name":"Ben","gender":"Male","age":22},
        {"studentId":"3","name":"Lisa","gender":"Female","age":24},
        {"studentId":"4","name":"Sarah","gender":"Female","age":26},
        {"studentId":"5","name":"Jay","gender":"Male","age":20}
    ],
}

如果没有,您确实需要一个自定义反序列化器。


推荐阅读