1. 配置
(1) 文件配置参考这里
(2) 导入jackson相关包:jackson-annotations-2.9.4.jar,jackson-core-2.9.4.jar,jackson-databind-2.9.4.jar


(3) 在WebContent目录下创建js文件夹,加入jquery和json2的js文件

js文件及jackson的jar文件可以在这里下载

2. 项目结构

一、接收json格式的数据
1. book.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试接收JSON格式的数据</title>
<script type="text/javascript" src="${ctx }/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="${ctx }/js/json2.js"></script>
<script type="text/javascript">
$(document).ready(function(){
testRequestBody();
}); function testRequestBody() {
$.ajax("${ctx}/json/testRequestBody",// 发送请求的URL字符串。
{
dataType : "json", // 预期服务器返回的数据类型。
type : "post", // 请求方式 POST或GET
contentType : "application/json", // 发送信息至服务器时的内容编码类型
// 发送到服务器的数据。
data : JSON.stringify({
bookId : 1,
bookName : "Spring MVC"
}),
async : true, // 默认设置下,所有请求均为异步请求。如果设置为false,则发送同步请求
// 请求成功后的回调函数。请求完成后使用function(data)函数,把结果显示到页面上来
success : function(data) {
console.log(data);
$("#id").html(data.bookId);
$("#name").html(data.bookName);
$("#author").html(data.bookAuthor);
},
// 请求出错时调用的函数
error : function() {
alert("数据发送失败");
}
});
}
</script>
</head>
<body>
编号:<span id="id"></span><br>
书名:<span id="name"></span><br>
作者:<span id="author"></span><br>
</body>
</html>

在jsp页面中:
(1) 页面使用jQuery发送json数据
(2) 页面载入时调用testRequestBody函数
(3) testRequestBody函数发送异步请求到"json/testRequestBody",请求成功将返回一个json数据,接到返回的数据后,将数据设置到页面的<span>中
2. BookController.java

@Controller
@RequestMapping("/json")
public class BookController { private static final Log logger = LogFactory.getLog(BookController.class); //@RequestBody根据json数据,转换成对应的Object
@RequestMapping(value="/testRequestBody")
public void setJson(@RequestBody Book book,
HttpServletResponse response) throws Exception{
// ObjectMapper类是Jackson库的主要类。它提供一些功能将Java对象转换成对应的JSON格式的数据
ObjectMapper mapper = new ObjectMapper();
// 将book对象转换成json输出
logger.info(mapper.writeValueAsString(book) );
book.setBookAuthor("文");
response.setContentType("text/html;charset=UTF-8");
// 将book对象转换成json写出到客户端
response.getWriter().println(mapper.writeValueAsString(book));
}

@RequestBody Book book表示:使用@RequestBody注解获取到的json数据,将json数据设置到对应的Book对象的属性中,HttpServletResponse response用来输出响应数据到客户端。
前台jsp页面的json数据传入bookId和bookName,为了测试接收数据,使用logger.info(mapper.writeValueAsString(book) ),代码将接收到的json数据的book对象打印在控制台上。

3. Book.java

public class Book implements Serializable{
private Integer bookId;
private String bookName;
private String bookAuthor;
public Book(){
super();
} public Book(Integer id, String name, String author) {
super();
this.bookId = id;
this.bookName = name;
this.bookAuthor = author;
}
//setter and getter }

在浏览器中输入http://localhost:8080/ProgramName/book.jsp
在载入index.jsp页面时,会发送ajax请求,传递json数据,BookController接收到请求后,@RequestBody注解会将json数据设置到Book参数的对应属性中
然后setJson方法给Book对象的author属性赋值,并把Book对象转换成json输出到客户端。结果如下:

控制台输出如下信息:

INFO [http-bio-8080-exec-17] - {"bookId":1,"bookName":"Spring MVC","bookAuthor":null}

二、返回json格式的数据
1. BookController.java

@RequestMapping(value="/testRequestBody2")
//ResponseBody会将集合数据转换为json格式,并将其返回客户端
@ResponseBody
public Object getJson(){
List<Book> list = new ArrayList<Book>();
list.add(new Book(1,"Spring MVC","文"));
list.add(new Book(2,"JavaEE","李"));
return list;
}

getJson方法将List集合数据转换成json格式,然后将其返回到客户端。
1. book2.jsp

<%@ 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/testRequestBody2",null,
function(data){
$.each(data,function(){
var tr = $("<tr align='center'/>");
$("<td/>").html(this.bookId).appendTo(tr);
$("<td/>").html(this.bookName).appendTo(tr);
$("<td/>").html(this.bookAuthor).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>

在浏览器中输入http://localhost:8080/ProgramName/book.jsp
载入book2.jsp页面时会发送ajax请求,getJson方法创建多个Book对象并将其封装到List集合中返回,方法上的@RequestBody注解会将集合数据转换为json格式数据并将其返回客户端。结果如下:

参考:《Spring+MyBatis企业应用实战》

springmvc+json 前后台数据交互的更多相关文章

  1. 测开之路一百五十四:ajax+json前后台数据交互

    在实际工作中,前后端数据交互大部分都是用的json格式,后端把数据处理完后,把json传给前端,前端再解析 项目结构 models里面加入把数据转为字典的方法 from datetime import ...

  2. Phonegap开发的前后台数据交互

    在用Phonegap开发时,需要进行前后台数据交互,在网上找资料,很多东西让人一头雾水,最后借鉴了下面的博客: http://blog.sina.com.cn/s/blog_681929ae01017 ...

  3. Spring MVC 前后台数据交互

    本文是转载文章,感觉比较好,如有侵权,请联系本人,我将及时删除. 原文网址地址:<Spring MVC 前后台数据交互> 1.服务端数据到客户端 (1)返回页面,Controller中方法 ...

  4. Django学习笔记(8)——前后台数据交互实战(AJAX)

    这里将自己这段时间学习的关于前后台数据交互的笔记写在这里,这里包含了Django传输数据给JS,AJAX的相关问题,跨域问题,如何解决AJAX的跨域问题等等.比较凌乱,请看到这篇博客的盆友见谅,如果我 ...

  5. HTML和JSON的数据交互-jsonp跨域

    HTML和json的数据交互 <!DOCTYPE html> <html> <head> <script src="//ajax.googleapi ...

  6. HTML和JSON的数据交互-HTML模板

    直接上源码,原文http://www.zhangxinxu.com/wordpress/2012/09/javascript-html-json-template/ <!DOCTYPE html ...

  7. 用PHP和Ajax进行前后台数据交互——以用户登录为例

    很多网站中都有用户登录系统,要完成用户的注册和登陆,就一定要用到前后台的数据交互.在这里以简单的用户注册和登陆为例介绍一下前后台交互的大致流程. 首先,我们来做一个简单的登陆界面. 这里为了方便我使用 ...

  8. vue仓库、组件间通信、前后台数据交互、前端储存数据大汇总

    目录 路由重定向 仓库介绍 vuex插件:可以完成任意组件间信息交互(移动端) 前端存储数据大汇总 前后台交互方式(重点) 前后台数据交互 axios插件:完成前后台ajax交互的 同源策略 - 前后 ...

  9. 玩转Web之Json(二)----jquery easy ui + Ajax +Json+SQL实现前后台数据交互

    最近在学Json,在网上也找过一些资料,觉得有点乱,在这里,我以easy ui的登录界面为例来说一下怎样用Json实现前后台的数据交互 使用Json,首先需要导入一些jar包,这些资源可以在网上下载到 ...

随机推荐

  1. 关于selenium的智能等待页面加载的问题

    我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作, 否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后,才能操作. 首 ...

  2. 执行shell脚本时提示bad interpreter:No such file or directory的解决办法

    执行shell脚本时提示bad interpreter:No such file or directory的解决办法 故障现象:在终端直接cd /var正常,在shell脚本中执行则报错.原因是脚本是 ...

  3. 《杜增强讲Unity之Tanks坦克大战》5-子弹

    5 子弹 本节的任务是创建子弹的Prefab   image 首先从Model/Shell找到子弹的模型,拖入Hierarchy中,添加刚体组件,所有属性默认值. 添加Capsule Collider ...

  4. C语言学习之路之基础变量

    Hello,大家好,今天又和大家见面了!前两天,我看到了几款游戏引擎渲染效果的对比的视频,https://www.bilibili.com/video/av5113296?from=search&am ...

  5. 粒子群算法(PSO)关于参数w的一些改进方法

    (一)线性递减 function [xm,fv] = PSO_lin(fitness,N,c1,c2,wmax,wmin,M,D) format long; % fitness学习函数 % c1学习因 ...

  6. [C++]typedef用法

    参考:C/C++ typedef用法详解(真的很详细) 四个用途 定义一种类型的别名,而不是简单的宏替换 定义struct新对象的别名 定义和平台无关的类型 为复杂声明定义一个简单的别名 typede ...

  7. redis使用Jackson2JsonRedisSerializer序列化问题

    一.spring boot 集成Redis方法 依赖 <!--redis--> <dependency> <groupId>org.springframework. ...

  8. PHP中的__toString() 是什么东西

    __toString()  是魔术方法的一种,具体用途是当一个对象被当作字符串对待的时候,会触发这个魔术方法 以下说明摘自PHP官方手册 public string __toString ( void ...

  9. [shell] 脚本之shift和getopts (转载)

    转载地址:http://www.361way.com/shell-shift-getopts/4973.html 建议不熟悉getopts的朋友,此篇要看完,getopts部分内容在原作者上面有改动. ...

  10. Oracle和MySQL插入时获取主键

    这里只写selectKey方法的 一,Oracle数据库中的写法 order="BEFORE"因为oracle中需要先从序列获取值,然后将值作为主键插入到数据库中 <sele ...