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 添加到类路径 将<mvc:annotation-driven>
添加到您的配置中
返回Map<Integer, String>
对于更复杂的情况,当您需要为每个处理程序方法配置映射过程时,您可以使用 MappingJacksonJsonView
而不是 @ResponseBody
,正如 Stepen C 建议的那样。
【讨论】:
<mvc:annotation-driven>
在我的情况下丢失了
供参考,我认为这是一个更详细的指南:blog.springsource.com/2010/01/25/…【参考方案5】:
您需要阅读 Spring 用户指南的第 15.5 章,其中描述了如何配置 MVC 视图,以及简要描述 JSON 映射视图的第 16.10 章。然后阅读 MappingJacksonJsonView
等的 javadocs。
【讨论】:
文档参考链接会有所帮助 @cdalxndr - 你有吗?请添加它们!以上是关于Spring MVC -> JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章
接受/返回 XML/JSON 请求和响应 - Spring MVC
使用 JSON Sanitizer 清理来自 Spring MVC 控制器的响应 JSON?
Spring MVC(或 Spring Boot)。针对安全相关异常(例如 401 Unauthorized 或 403 Forbidden)的自定义 JSON 响应)