【问题标题】:Json From RESTFul来自 RESTFul 的 Json
【发布时间】:2017-01-18 02:09:44
【问题描述】:

我正在尝试创建应该返回的 Spring Restful 服务:

{"counts": [{"SearchText1": 11}, {"SearchText2": 16}, {"SearchText3": 8}]}

其中“SearchText1”是要在文档中搜索的文本,11 是重复次数。

我一直在尝试将此 Json 建模为 java 类以返回,以便可以将其序列化为 Json,但还没有运气!

 public class CountResultWrapper {

     List<CountResult> counts = new  ArrayList<CountResult>();

    public List<CountResult> getCounts() {
        return counts;
    }

    public void setCounts(List<CountResult> counts) {
        this.counts = counts;
    }

    }

public class CountResult {

    String searchText;
    Integer count;


    public CountResult(String searchText,Integer count)
    {
        this.searchText = searchText;
        this.count = count;
    }

    public String getSearchText() {
        return searchText;
    }
    public void setSearchText(String searchText) {
        this.searchText = searchText;
    }
    public Integer getCount() {
        return count;
    }
    public void setCount(Integer count) {
        this.count = count;
    }

}

但我明白了:

{"counts":[{"searchText":"searchText1","count":11},{"searchText":"searchText2","count":8},{"searchText":"searchText3","count":7}]}

有人可以帮帮我吗?

【问题讨论】:

标签: java json spring rest


【解决方案1】:

由于字段名称是动态的,因此无法使用模型类直接实现 - 因为您不能为每个 searchtext 记录创建新字段。

但是,可以使用下面的方法来实现 - 大容量可能会很昂贵,但它会为您返回预期的输出

        List<HashMap<String, Integer>> counts = new ArrayList<>();
        counts.add(new HashMap<String, Integer>() {{put("SearchText1",11);}});
        counts.add(new HashMap<String, Integer>() {{put("SearchText2",11);}});

        JSONObject output = new JSONObject();
        output.put("counts",counts);
        System.out.println(output.toString());

输出:

{
  "counts": [{
      "SearchText1": 11
  }, {
      "SearchText2": 16
  }, {
      "SearchText3": 8
  }]
}

【讨论】:

    【解决方案2】:

    你可以添加这个类并使用。该响应为响应提供 json 输出。但你不想要 http 响应,那么返回类型可以更改为 JSONObject 输出。

     import java.util.ArrayList;
        import java.util.HashMap;
        import java.util.List;
        import java.util.Map;
        import org.springframework.http.ResponseEntity;
    
    public class JesonCreater {
    
    
    public ResponseEntity<?> responseProvider(CountResultWrapper wrapper){
        Map<String,List<HashMap<String, Integer>>> responseMap=new HashMap<>();
        List<CountResult> counts=wrapper.getCounts();
        List<HashMap<String, Integer>> countListMap = new ArrayList<>();
        for (CountResult count : counts) {
            HashMap<String, Integer> countMap=new HashMap<>();
            countMap.put(count.getSearchText(), count.getCount());
            countListMap.add(countMap);         
        }
        responseMap.put("count", countListMap);
        return ResponseEntity.ok(responseMap);
    }
    }
    

    答案是这样的

    {
    
    "count": [
        {
          "searchText2": 4
        },
        {
          "searchText1": 11
        }
      ]
    }
    

    【讨论】:

      【解决方案3】:

      我就是这样解决的:

          List<HashMap<String, Integer>> countsList = new ArrayList<>();
          searchTexts.forEach(searchText ->{
               countsList.add(new HashMap<String, Integer>()
               {{put(searchText,countMap.get(searchText.toUpperCase()) == null ? 0 : countMap.get(searchText.toUpperCase()));}});
          });
          Map<String, List<HashMap<String, Integer>>> response = new HashMap<>();
          response.put("counts", countsList);
      

      【讨论】:

        【解决方案4】:

        我必须告诉你,你无法通过这种方式得到你想要的结果。控制台输出适合您的情况。将ConutResult转换为json对象时,字段名将放入key,字段值放入value。喜欢:

        {"searchText":"xxx", "count":xxx}
        

        如果你真的想这样做,你可能需要 3 个类:

        class CountResult1{
            private int searchText1;
        }
        
        class CountResult2{
            private int searchText2;
        }
        
        class CountResult3{
            private int searchText3;
        }
        

        那么这3个类可以转换为:

        {"searchText1":xxx}, {"searchText2":xxx}, {"searchText3":xxx}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-27
          • 1970-01-01
          • 2015-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多