【问题标题】:Java Spring custom JSON responseJava Spring 自定义 JSON 响应
【发布时间】:2022-02-05 12:12:44
【问题描述】:

我有一个看起来像这样的数据:

{
"name":{
"first": "<firstName>",
"last": "<lastName>" 
},
"info": "<info>",
"place":{
           "location": "<location>",
},
"test": "<test>"
}

但是,我想自定义响应 json 并按 location 对数据进行分组。 换句话说,我希望得到这样的回应:

"location":[{
            "name": <location>, 
                   user: [{
                         "name": <firstName> + <lastName>, 
                         "info": <info>, 
                         "test": <test>
                         }]
            }]

我已经尝试将它变成这样的地图:

List<Data> data= newArrayList(repository.findAll(Sort.by(Sort.Direction.ASC, "location")));
Map<String, Object> result= new HashMap<>();
for (Data d : data) {
result.put("name",  d.getLocation());
result.put("user", d.getFirstName());

... 等等,但这不起作用。实现我想要的结果的最佳方法是什么?

【问题讨论】:

    标签: java json spring-boot


    【解决方案1】:

    到目前为止,您只有一个 result 地图,然后您将在循环中覆盖该地图,因此它将仅包含一个位置的数据,即最后一个位置。您可能想要做的是创建这些地图的列表,这需要在循环内创建一个新地图,并将它们收集到一个列表中:

    List<Map<String, Object>> result=new ArrayList<>();
    for(Data d : data) {
      Map<String, Object> item = new HashMap<>();
      item.put("name", d.getLocation());
      item.put("user", d.getFirstName());
      ...
      result.add(item);
    }
    

    【讨论】:

    • 有更好的方法吗?我不能创建一个新的 Java 类来模拟所有这些吗?
    • @Richard 是的,当然可以为它创建一个专用类,大概是使用构造函数从Data 对象填充自己的字段。当然,它看起来比在地图中存储Objects 更好。问题是这样的类是否会做任何其他事情——如果你可以在多个位置重复使用它,它是否可以做任何额外的处理(Maps 不能做的事情)等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多