想要来自休眠 json 响应的嵌套 json 格式

Posted

技术标签:

【中文标题】想要来自休眠 json 响应的嵌套 json 格式【英文标题】:want nested json format from hibernate json response 【发布时间】:2017-07-30 00:55:15 【问题描述】:

我有如下的 json 响应

["Name":"kannur hub","Amount":1840.00,"Name":"Calicut Hub","Amount":7000.00]

我想要一个这样的json而不是上面的格式

["name":"kannur hub","TotalAmount":1840,"child":["sub":"Sale Of Products @ 12 % Tax","amount":345,"sub":"sos","amount":1020,"sub":"Boss","amount":475],"name":"Calicut Hub","TotalAmount":7000,"child":[sub":"cop","amount":3500,"sub":"SALES ACCOUNT","amount":3500]]

因此,每当我从休眠投影中检索子分组时,结果都会删除总和值并返回单个值

["sub":"Boss","Name":"kannur hub","Amount":475.00,"sub":"sos","Name":"kannur hub","Amount":1020.00,"sub":"cop","Name":"Calicut Hub","Amount":3500.00,"sub":"SALES ACCOUNT","Name":"Calicut Hub","Amount":3500.00,"sub":"Sale Of Products @ 12 % Tax","Name":"kannur hub","Amount":345.00]

休眠查询是,

ProjectionList proj = Projections.projectionList();
        proj.add(Projections.groupProperty("offId.officeProfileName").as("Name"));
        proj.add(Projections.groupProperty("accId.accHeadName").as("sub"));
        proj.add(Projections.sum("accountsDataValue").as("Amount"));
        crit.setProjection(proj);

我正在使用 java 1.8 版本的 spring boot 应用程序和 postgresql 数据库

【问题讨论】:

【参考方案1】:

如果你想获得你想要的json结果,你应该创建一个自定义的DTO,请看下面的例子。

class Child 
    String sub;
    Long amount;


class Dto 
   String name;
   Long totalAmount;
   List<Child> child;

然后编写您的 Dto 并添加必要的子级。下面是示例,假设您已经从 db 中获得了结果:

如果你的 rs 返回是 List&lt;Child&gt; 那么你可以这样做..

Dto dto = new Dto();
dto.addAll(rs);
dto.setName("name");
dto.setTotalAmount(totalAmount);
return dto;

或者如果 rs 结果不是 List&lt;Child&gt; 你可以这样做...

Dto dto = new Dto();
//assumed rs contains the db child results.
for(int i=0; i<rs.length; i++) 
    Child child = new Child(rs.get("sub"), rs.get("amount"))
    dto.getChild().add(child)

dto.setName("name");
dto.setTotalAmount(totalAmount);
return dto;

生成的有效 JSON 如下所示:


        "name":"kannur hub",
        "TotalAmount":1840,
        "child":[
            
                "sub":"Sale Of Products @ 12 % Tax",
                "amount":345,
            ,
            
                "sub":"sos",
                "amount":1020,
            ,
            
                "sub":"Boss",
                "amount":475
            
        ]
    ,
    
        "name":"Calicut Hub",
        "TotalAmount":7000,
        "child":[
            
                "sub":"cop",
                "amount":3500
            ,
            
                "sub":"SALES ACCOUNT",
                "amount":3500
            
        ]
    

【讨论】:

您能否更具体一些,尤其是在创建 DTO 类之后

以上是关于想要来自休眠 json 响应的嵌套 json 格式的主要内容,如果未能解决你的问题,请参考以下文章