2011-09-06 62 views
1

我收到以下錯誤試圖返回我的對象​​是用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; 
    } 

} 

回答

3

的關鍵信息是and no properties discovered to create BeanSerializer:你的類ResourceResultSetColResourceResultSetRow應該有默認公共構造函數和所有屬性的getters/setter。

+0

你是一個巫師哈利。我有(顯然是上面的代碼)公共構造函數,但我沒有getter/setter。這解決了它。我應該在第一個8小時的挫折之後問這個問題,而不是最後8個小時......並且我們甚至不會介紹其間有多少個問題;) –

+1

@BillMote:不,你有非默認構造函數在'ResourceResultSetRow'和*默認*可見性(應該是公開的)。我希望之後,它將作爲一種魅力:) –

+0

是的。我掃過並做了一些清理。我在最初回應之前解決了這個問題。 –