2010-11-17 69 views
13

我有一個JAVA EE後端,我正在使用Spring MVC。我有一個AJAX調用是這樣的:Spring MVC - > JSON響應

function getAllProjects() { 
     $.getJSON("project/getall", function(allProjects) { 
      ??? 
     }); 
    } 

我的後臺系統:

@RequestMapping(value="/getall", method=RequestMethod.GET) 
public @ResponseBody ??? getAllProjects() { 
    ??? 
} 

內容是什麼我要實現這樣它是否行得通呢?在後端系統我已經從數據庫中調用的唯一ID和項目的名稱,例如:

1 => My Test Project 
4 => Another One 
23 => One More Test 

ID和項目名稱應返回給前端系統,這樣我就可以建立一個HTML ul/li這種類型的列表:

<ul> 
    <li><a href="/1">My Test Project</a></li> 
    <li><a href="/4">Another One</a></li> 
    <li><a href="/23">One More Test</a></li> 
</ul> 

有沒有人知道這可以做到這一點?

回答

14

您需要:

  • 添加Jackson JSON Mapper到classpath
  • 添加<mvc:annotation-driven>到你的配置
  • 返回Map<Integer, String>

對於更復雜的情況下,當您需要爲每個處理程序方法配置映射過程時,您可以使用​​而不是正如Stepen C所建議的那樣,。

+0

''在我的情況下失蹤 – Joram 2012-03-13 11:02:04

+0

僅供參考,我認爲這是一個更詳細的指導:http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/ – 2012-06-14 07:04:09

8

您需要閱讀Spring用戶指南的第15.5章,它描述瞭如何配置MVC視圖,以及第16.10章簡要描述了JSON映射視圖。然後閱讀的Javadoc​​等

8

您也可以使用org.json的JSONArray和JSONObject來構造JSON輸出,然後返回一個String值作爲@ResponseBody。

http://www.json.org/javadoc/org/json/JSONObject.html

@RequestMapping(value="/getall", method=RequestMethod.GET) 
public @ResponseBody String getAllProjects() { 
    ... 
    JSONArray jsonItems = new JSONArray(); 

    JSONObject jsonItem1 = new JSONObject(); 
    jsonItem1.put("id", "1"); 
    jsonItem1.put("name", "My Test Project"); 

    JSONObject jsonItem2 = new JSONObject(); 
    jsonItem2.put("id", "4"); 
    jsonItem2.put("name", "Another one"); 

    jsonItems.put(jsonItem1); 
    jsonItems.put(jsonItem2); 

    return jsonItems.toString(); 
} 

你應該得到這樣的事情在你的Ajax請求的成功回調。

[{ 
    "id":"1", 
    "name":"My Test Project" 
},{ 
    "id":"4", 
    "name":"Another one" 
}] 

您可以使用此數據來追加您的ul li使用JavaScript或使用_underscore模板來呈現您的用戶界面。

+0

更高效的解決方案?或者更好地使用傑克遜函數writeValueAsString? – 2013-07-29 14:14:08