2010-11-17 68 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