CGSize(width:150, height:150)
我在下面的restful控制器中写了一个方法。
Class EntityDataSet {
public List<EntityRow> getData() {
return rowList;
}
class EntityRow {
private Map<String, Object> rowData;
public Map<String, Object> getRowData() {
return rowData;
}
}
返回的json如下所示。
@RequestMapping(value = "/entityData", method = RequestMethod.POST, headers = "Accept=application/json")
public EntityDataSet getEntityData(@RequestBody QueryObject query) throws Exception{
return entityManager.generateEntityDataByName(query);
}
但我想得到的就像下面一样。
{
"data": [
{
"rowData": {
"FISCAL_YEAR_END": null,
"HOME_COUNTRY": null
}
},
{
"rowData": {
"FISCAL_YEAR_END": null,
"HOME_COUNTRY": "10"
}
},
..................
我该如何实施?感谢。
答案 0 :(得分:1)
可以使用EntityRow类中的@JsonAnySetter
和@JsonAnyGetter
注释完成(如果使用Jackson):
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class EntityDataSet {
@JsonProperty("data")
private List<EntityRow> rowList;
/**
* @return the rowList
*/
public List<EntityRow> getRowList() {
return rowList;
}
/**
* @param rowList the rowList to set
*/
public void setRowList(List<EntityRow> rowList) {
this.rowList = rowList;
}
/**
*
* @param row
*/
public void add(EntityRow row){
if(this.rowList == null){
this.rowList = new ArrayList<EntityRow>();
}
this.rowList.add(row);
}
}
这是关键类,带有@JsonAnySetter和@JsonAnyGetter注释的EntityRow
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
public class EntityRow {
private Map<String, Object> rowData;
/**
* @param rowData the rowData to set
*/
@JsonAnySetter
public void setRowData(Map<String, Object> rowData) {
this.rowData = rowData;
}
@JsonAnyGetter
public Map<String, Object> getRowData() {
return rowData;
}
}
测试它的主要内容:
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test4 {
public static String getJsonString(Object o){
ObjectMapper mapper = new ObjectMapper();
//For testing
try {
//Convert object to JSON string
String jsonInString = mapper.writeValueAsString(o);
//System.out.println(jsonInString);
return jsonInString;
} catch (JsonProcessingException e){
e.printStackTrace();
}
return null;
}
public static void main(String args[]){
Map<String, Object> map = new HashMap<String, Object>();
map.put("FISCAL_YEAR_END", null);
map.put("HOME_COUNTRY", null);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("FISCAL_YEAR_END", null);
map2.put("HOME_COUNTRY", "10");
EntityRow row1 = new EntityRow();
row1.setRowData(map);
EntityRow row2 = new EntityRow();
row2.setRowData(map2);
EntityDataSet entityDataSet = new EntityDataSet();
entityDataSet.add(row1);
entityDataSet.add(row2);
System.out.println(Test4.getJsonString(entityDataSet));
}
}
最后,这是输出:
{"data":
[
{
"FISCAL_YEAR_END":null,
"HOME_COUNTRY":null
},
{
"FISCAL_YEAR_END":null,
"HOME_COUNTRY":"10"
}
]
}