Java 来自RESTFul的Json
我正在尝试创建Spring Restful服务,该服务将返回: {“计数”:[{“SearchText1”:11},{“SearchText2”:16},{“SearchText3”:8}]} 其中,“SearchText1”是要在文档中搜索的文本,11是重复次数 我一直在尝试将这个Json建模为java类以返回,这样就可以将其序列化为Json,但还没有成功Java 来自RESTFul的Json,java,json,spring,rest,Java,Json,Spring,Rest,我正在尝试创建Spring Restful服务,该服务将返回: {“计数”:[{“SearchText1”:11},{“SearchText2”:16},{“SearchText3”:8}]} 其中,“SearchText1”是要在文档中搜索的文本,11是重复次数 我一直在尝试将这个Json建模为java类以返回,这样就可以将其序列化为Json,但还没有成功 public class CountResultWrapper { List<CountResult> coun
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;
}
}
有人能帮我一下吗?因为字段名是动态的,所以不能使用模型类直接实现,因为不能为每个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());
由于字段名是动态的,因此无法使用模型类直接实现,因为您不能为每个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());
我必须告诉你,用这种方法你不能得到你想要的结果。控制台输出适合您的情况。将
ConutResult
转换为json对象时,字段名将被放入键中
,字段值将被放入值中
。比如:
{"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}
我必须告诉你,用这种方法你不能得到你想要的结果。控制台输出适合您的情况。将
ConutResult
转换为json对象时,字段名将被放入键中
,字段值将被放入值中
。比如:
{"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}
您可以添加此类并使用。该响应为响应提供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);
}
}
您可以添加此类并使用。该响应为响应提供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);
}
}
我就是这样解决的:
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);
List countsList=new ArrayList();
searchText.forEach(searchText->{
countsList.add(新的HashMap()
{{put(searchText,countMap.get(searchText.toUpperCase())==null?0:countMap.get(searchText.toUpperCase());}};
});
Map response=newhashmap();
响应。put(“计数”,计数列表);
我就是这样解决的:
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);
List countsList=new ArrayList();
searchText.forEach(searchText->{
countsList.add(新的HashMap()
{{put(searchText,countMap.get(searchText.toUpperCase())==null?0:countMap.get(searchText.toUpperCase());}};
});
Map response=newhashmap();
响应。put(“计数”,计数列表);
参见感谢我修改了代码并添加了代码如果您想创建自己的JSON,请手工制作,或者将类更改为Suitese谢谢我修改了代码并添加了代码如果您想创建自己的JSON,请手工制作,或者更改类以适应