我收到以下錯誤試圖返回我的對象是用SpringMVC使用@ResponseBody JSON字符串:系列化@ResponseBody使用錯誤的ArrayList
org.codehaus.jackson.map.JsonMappingException:沒有串行發現類融爲一體。 ResourceResultSetCol並沒有發現創建BeanSerializer的屬性(以避免異常,禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))(通過引用鏈:com.medplus.devops.pdt.server.ResourceResultSet [「cols」] - > java.util.ArrayList [ 0])
GraphResultSet.java:
@Controller
@RequestMapping("/pdt")
public class GraphResultSet {
@RequestMapping(value = "/getResourceResultSet", method = RequestMethod.GET)
public @ResponseBody
ResourceResultSet getResourceResultSet(
@RequestParam(value = "resourceId", required = true) int resourceId) {
return new ResourceResultSet(resourceId);
}
}
ResourceResultSet.java:
public class ResourceResultSet implements Serializable {
public String resourceName;
public ArrayList<ResourceResultSetCol> cols;
public ArrayList<ResourceResultSetRow> rows;
ResourceResultSet(int id) {
resourceName = "Graph " + id;
cols = new ArrayList<ResourceResultSetCol>();
cols.add(new ResourceResultSetCol("col1","Timestamp","date"));
cols.add(new ResourceResultSetCol("col2","Value","number"));
int randomNumberOfResults = new Random().nextInt(5);
int numberOfResults[] = new int[] {12,288,2016,8928,107136}; // hour, day, week, month, year
Calendar now = Calendar.getInstance();
rows = new ArrayList<ResourceResultSetRow>();
for (int resultIndex = 0; resultIndex <= numberOfResults[randomNumberOfResults]; ++resultIndex) {
now.setTime(now.getTime());
now.add(Calendar.MINUTE, resultIndex * -5);
this.rows.add(new ResourceResultSetRow(now.getTime().toString(), new Random().nextInt(101)));
}
}
}
ResourceResultSetCol.java:
public class ResourceResultSetCol implements Serializable {
private String id;
private String label;
private String type;
public ResourceResultSetCol(String id, String label, String type){
this.id = id;
this.label = label;
this.type = type;
}
}
ResourceResultSetRow.java:
public class ResourceResultSetRow implements Serializable {
private String timestamp;
private int result;
ResourceResultSetRow(String timestamp, int result) {
this.timestamp = timestamp;
this.result = result;
}
}
你是一個巫師哈利。我有(顯然是上面的代碼)公共構造函數,但我沒有getter/setter。這解決了它。我應該在第一個8小時的挫折之後問這個問題,而不是最後8個小時......並且我們甚至不會介紹其間有多少個問題;) –
@BillMote:不,你有非默認構造函數在'ResourceResultSetRow'和*默認*可見性(應該是公開的)。我希望之後,它將作爲一種魅力:) –
是的。我掃過並做了一些清理。我在最初回應之前解決了這個問題。 –