Spring Responsebody,json中的命名列表对象

Posted

技术标签:

【中文标题】Spring Responsebody,json中的命名列表对象【英文标题】:Spring Responsebody, Naming List objects in json 【发布时间】:2017-11-07 07:48:18 【问题描述】:

我正在使用 Spring Framework 的 spring-boot 库开发 REST 服务。 我从我的服务以 JSON 形式获得响应,我的问题是我使用父类来存储作为请求结果发送的所有对象,并且响应在 JSON 数组上没有名称发送。

这是我的一项测试的输出:

success: true,
message: null,
data: [
 ,

vehicleBatteryId: 3,
modelTypeId: 3,
cycleCount: -9640,
currentCapacity: -9640,
manufactureDate: 414037682000,
manufacturerId: 10,
modeTypeCode: 461271880,
partStatus: 215692740,
lastMaintenanceDate: 428880743000
,

vehicleBmsId: 3,
bmsModelId: 5,
manufactureDate: 942436247000,
manufacturerId: 4,
lastMaintenanceDate: 437823118000,
partStatus: 477293493,
replaceDate: 179716409000,
replaceDistance: 4783810
...

这是我想要得到的结果:

success: true,
message: null,
data: 
Property1: ,
Property2:
vehicleBatteryId: 3,
modelTypeId: 3,
cycleCount: -9640,
currentCapacity: -9640,
manufactureDate: 414037682000,
manufacturerId: 10,
modeTypeCode: 461271880,
partStatus: 215692740,
lastMaintenanceDate: 428880743000
,...

这是父类。我希望能够将它用于我的服务创建的每个响应,无论该响应的详细信息如何

public class MasterResponse extends RequestStatus
    private List<Object> data;

    public MasterResponse() 
        init();
    

    public MasterResponse(boolean _success, String _message)
        super(_success, _message);
        init();
    
    private void init()
        this.data = new ArrayList<Object>();
    

    public void addModel(Object newModel)
        this.data.add(newModel);
    

    public void clearData()
        this.data=null;
    

    public List<Object> getData() 
        return data;
    

    public void setData(List<Object> data) 
        this.data = data;
    

有人有什么想法吗?据我所知,Spring 使用 Jackson 转换为 json,我正在探索他们目前提供的 json 视图函数可以做什么。

【问题讨论】:

你能清楚地解释这一行吗?我希望能够将它用于我的服务创建的每个响应,无论该响应的详细信息如何 在我的例子中,我在控制器上使用了@RestController 注释并从该控制器返回parent objects。他们工作得很好,并给出了所有类的名称。 @Rahul 我有许多不同的模型代表不同的返回类型。例如:车辆和公司。无论它们是 Vehicle 类还是 Company 类,我都想将它们添加到“MasterResponse”中。 【参考方案1】:

您正在使用 ArrayList,Jackson 将其序列化为 [...,..., ...] 您可以对数据使用 Map(即 HashMap),但您可能需要创建自定义“push()”或 add() 函数,以维护索引属性。即Property1。

HashMap 对象将被序列化为:data: "index-1":..., "index-2": ... ...

您的代码的简单示例:

    private Map<String, Object> data;
    int nextIndex = 1;

    private void init()
        this.data = new HashMap<String, Object>();
    

    public void addModel(Object newModel)
            this.data.add("Property" + this.nextIndex, newModel);
            this.nextIndex++;
    

【讨论】:

以上是关于Spring Responsebody,json中的命名列表对象的主要内容,如果未能解决你的问题,请参考以下文章

Spring配置@ResponseBody JSON格式

如何使用 @ResponseBody 从 Spring Controller 返回 JSON 数据

SpringMVC 使用@ResponseBody返回json 中文乱码

Spring Responsebody,json中的命名列表对象

Spring MVC中用@ResponseBody转json,对json进行处理方法汇总

spring自带的json转换工具,支持@ResponseBody注解