Spring MVC - > JSON响应

Tim*_*Tim 13 html java ajax json spring-mvc

我有一个JAVA EE后端,我正在使用Spring MVC.我有一个像这样的AJAX调用:

function getAllProjects() {
        $.getJSON("project/getall", function(allProjects) {
            ???
        });
    }
Run Code Online (Sandbox Code Playgroud)

我的后端系统:

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

我必须实施哪些内容才能实现?在后端系统中,我从数据库中调用唯一的id和项目的名称,例如:

1 => My Test Project
4 => Another One
23 => One More Test
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?

axt*_*avt 14

你需要:

  • Jackson JSON Mapper添加到类路径中
  • 添加<mvc:annotation-driven>到您的配置
  • 返回 Map<Integer, String>

对于更复杂的情况,当您需要为每个处理程序方法配置映射过程时,您可以使用MappingJacksonJsonView而不是@ResponseBody像Stepen C建议的那样.


Ste*_*n C 8

您需要阅读Spring用户指南的第15.5章,其中介绍了如何配置MVC视图,以及第16.10章,其中简要介绍了JSON映射视图.然后阅读javadocs MappingJacksonJsonView等.


sev*_*sea 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();
}
Run Code Online (Sandbox Code Playgroud)

你应该在你的ajax请求的成功回调中得到这样的东西.

[{
   "id":"1",
   "name":"My Test Project"
},{
   "id":"4",
   "name":"Another one"
}]
Run Code Online (Sandbox Code Playgroud)

您可以使用此数据使用javascript附加您的文件或使用_underscore模板来呈现您的UI.