Spring MVC -> JSON 响应

Posted

技术标签:

【中文标题】Spring MVC -> JSON 响应【英文标题】:Spring MVC -> JSON response 【发布时间】:2011-05-11 08:10:06 【问题描述】:

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

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>

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

【问题讨论】:

【参考方案1】:

这些答案的其余部分已经过时了!现在很容易

将 Jackson2 添加到您的类路径 使用@RestController

例如:

@RestController
public class MyController 

    @RequestMapping("/thing")
    public MyThing thing() 
        return new MyThing();
    


参考: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-write-a-json-rest-service

【讨论】:

【参考方案2】:

您也可以使用 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"
]

您可以使用这些数据来使用 javascript 附加您的 ul li 或使用 _underscore 模板来呈现您的 UI。

【讨论】:

这个解决方案更有效吗?还是使用 Jackson 函数 writeValueAsString 更好?【参考方案3】:

这里建议: Spring 3 JSON with MVC 结帐这个网站: http://spring-json.sourceforge.net/ 它有关于如何在 Spring 框架中执行此操作的非常好的工作示例。

【讨论】:

【参考方案4】:

你需要:

将Jackson JSON Mapper 添加到类路径 将&lt;mvc:annotation-driven&gt; 添加到您的配置中 返回Map&lt;Integer, String&gt;

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

【讨论】:

&lt;mvc:annotation-driven&gt; 在我的情况下丢失了 供参考,我认为这是一个更详细的指南:blog.springsource.com/2010/01/25/…【参考方案5】:

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

【讨论】:

文档参考链接会有所帮助 @cdalxndr - 你有吗?请添加它们!

以上是关于Spring MVC -> JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章

接受/返回 XML/JSON 请求和响应 - Spring MVC

spring mvc 休息响应 json 和 xml

使用 JSON Sanitizer 清理来自 Spring MVC 控制器的响应 JSON?

Spring MVC(或 Spring Boot)。针对安全相关异常(例如 401 Unauthorized 或 403 Forbidden)的自定义 JSON 响应)

Spring mvc jackson json mapper-如何将unicode编码应用于json响应中的特殊字符

使用 REST 模板和 JSON 响应格式在 Spring MVC 上返回 Http Status 500