3.14 @ResponseBody注解
org.springframework.web.bind.annotation.ResponseBody
注解用于将Controller
的请求处理方法返回的对象
,通过适当的HttpMessageConverter
转换为指定格式后,写入到Response
对象的body
数据区。当返回的数据不是HTMT
标签的页面,而是其他某种格式的数据时(如JSON
、XML
等)使用它。
示例 @ResponseBody返回JSON格式的数据
创建一个ResponseBodyTest
项目,在WebContent
目录下创建一个js
目录,加入jQuery
和json2
的js
文件,在WEB-INF/lib
目录中加入Jackson
的jar
文件。
BookController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package org.fkit.controller;
import java.util.ArrayList; import java.util.List; import org.fkit.domain.Book; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
@Controller @RequestMapping("/json") public class BookController { @RequestMapping(value = "/testRequestBody") @ResponseBody public Object getJson() { List<Book> list = new ArrayList<Book>(); list.add(new Book(1, "书名字1", "作者1")); list.add(new Book(2, "书名字2", "作者2")); return list; } }
|
getJson
方法会将List
集合数据转换成JSON
格式,然后将其返回到客户端。
index.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试返回JSON格式的数据</title> <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="js/json2.js"></script> <script type="text/javascript"> $(document).ready(function() { testResponseBody(); }); function testResponseBody() { $.post("${pageContext.request.contextPath}/json/testRequestBody", null, function(data) { $.each(data, function() { var tr = $("<tr align='center'/>"); $("<td/>").html(this.id).appendTo(tr); $("<td/>").html(this.name).appendTo(tr); $("<td/>").html(this.author).appendTo(tr); $("#booktable").append(tr); }) }, "json"); } </script> </head> <body> <table id="booktable" border="1" style="border-collapse: collapse;"> <tr align="center"> <th>编号</th> <th>书名</th> <th>作者</th> </tr> </table> </body> </html>
|
index.jsp
页面代码分析如下:
(1)页面使用jQuery
发送请求,在页面的<head>
部分,引入了jQuery
和json2
的js文件。
(2)载入页面时调用testResponseBody
函数。
(3) testResponseBody
函数发送异步请求到"json/testRequestBody"
,请求成功将返回一个JSON
数据,该数据包含多个书籍信息。接到返回的数据后使用jQuery
将数据设置到页面的<table>
表单中。
部署ResponseBodyTest
这个Web
应用,在浏览器中输入如下URL
来测试应用:
1
| http://localhost:8080/ResponseBodyTest/
|
载入index.jsp
页面时会发送Ajax
请求, getJson
方法创建多个Book
对象并将其封装到List
集合中返回,方法上的@ResponseBody
注解会将集合数据转换为JSON
格式数据并将其返回客户端。
此时客户端显示内容如下:
1 2 3
| 编号 书名 作者 1 书名字1 作者1 2 书名字2 作者2
|
这表示Spring MVC
成功将包含Book
对象的集合数据被转换成JSON
格式并被成功写回客户端。
原文链接: 3.14 @ResponseBody注解 示例 @ResponseBody返回JSON格式的数据