Spring MVC 在数据绑定的过程中需要对传递数据的格式和类型进行转换,它既可以转换 String 等类型的数据,也可以转换 JSON 等其他类型的数据。本节将针对 Spring MVC 中 JSON 类型的数据交互进行讲解。

JSON 概述

JSON(JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式。与 XML 一样,JSON 也是基于纯文本的数据格式。它有对象结构和数组结构两种数据结构。

1)对象结构

对象结构以“{”开始、以“}”结束,中间部分由 0 个或多个以英文“,”分隔的 key/value 对构成,key 和 value 之间以英文“:”分隔。对象结构的语法结构如下:

{key1:value1,key2:value2,...
}

其中,key 必须为 String 类型,value 可以是 String、Number、Object、Array 等数据类型。例如,一个 person 对象包含姓名、密码、年龄等信息,使用 JSON 的表示形式如下:

{"pname":"张三","password":"123456","page":40
}

2)数组结构

数组结构以“[”开始、以“]”结束,中间部分由 0 个或多个以英文“,”分隔的值的列表组成。数组结构的语法结构如下:

{value1,value2,...
}

上述两种(对象、数组)数据结构也可以分别组合构成更加复杂的数据结构。例如,一个 student 对象包含 sno、sname、hobby 和 college 对象,其JSON 的表示形式如下:

{"sno":"201802228888","sname":"张三","hobby":["篮球","足球"],"college":{"cname":"清华大学","city":"北京"}
}

JSON 数据转换

为实现浏览器与控制器类之间的 JSON 数据交互,Spring MVC 提供了 MappingJackson2HttpMessageConverter 实现类默认处理 JSON 格式请求响应。该实现类利用 Jackson 开源包读写 JSON 数据,将 Java 对象转换为 JSON 对象和 XML 文档,同时也可以将 JSON 对象和 XML 文档转换为 Java 对象。

在使用注解开发时需要用到两个重要的 JSON 格式转换注解,分别是 @RequestBody 和 @ResponseBody。

  • @RequestBody:用于将请求体中的数据绑定到方法的形参中,该注解应用在方法的形参上。
  • @ResponseBody:用于直接返回 return 对象,该注解应用在方法上。

下面通过一个案例来演示如何进行 JSON 数据交互,具体步骤如下。

1)创建应用并导入相关 JAR 包

创建 springMVCDemo05 应用,然后将 Spring MVC 的相关 JAR 包、JSON 转换包添加到 springMVCDemo05 的 lib 目录下。springMVCDemo05 的lib 目录如图 1 所示。

2)配置 web.xml

在 web.xml 文件中对 Spring MVC 的前端控制器等信息进行配置,其代码和《数据绑定和表单标签的应用》教程中的 SpringMVCDemo04 一样,这里不再赘述。

3)配置 Spring MVC 的核心配置文件

在 WEB-INF 目录下创建 Spring MVC 的核心配置文件 springmvc-servlet.xml,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 使用扫描机制扫描控制器类 --><context:component-scan base-package="controller" /><mvc:annotation-driven /><!-- annotation-driven用于简化开发的配置,注解DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --><!-- 使用resources过滤掉不需要dispatcherservlet的资源(即静态资源,例如css、js、html、images)。在使用resources时必须使用annotation-driven,否则resources元素会阻止任意控制器被调用 --><!-- 允许js目录下的所有文件可见 --><mvc:resources location="/js/" mapping="/js/**" /><!-- 配置视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean>
</beans>

4)创建 POJO 类

在 src 目录下创建 pojo 包,并在该包中创建 POJO 类 Person,代码如下:

package pojo;public class Person {private String pname;private String password;private Integer page;//省略setter和getter方法
}

5)创建 JSP 页面测试 JSON 数据交互

在页面 index.jsp 来测试 JSON 数据交互,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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></title>
<script type="text/javaScript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.min.js"></script>
</head>
<body><form action="">用户名:<input type="text" name="pname" id="pname" /><br> 密码:<input type="password" name="password" id="password" /> <br> 年龄:<input type="text" name="page" id="page"><br> <input type="button" value="测试" onclick="testJson()" /></form>
</body>
<script type="text/javaScript">function testJson() {//获取输入的值pname为idalert($("#pname").val());var pname = $("#pname").val();var password = $("#password").val();var page = $("#page").val();$.ajax({//请求路径url : "${pageContext.request.contextPath }/testJson",//请求类型type : "post",//data表示发送的数据data : JSON.stringify({pname : pname,password : password,page : page}), //定义发送请求的数据格式为JSON字符串contentType : "application/json;charset=utf-8",//定义回调响应的数据格式为JSON字符串,该属性可以省略dataType : "json",//成功响应的结果success : function(data) {if (data != null) {alert("输入的用户名:" + data.pname + ",密码:" + data.password+ ", 年龄:" + data.page);}}});}
</script>
</html>

在 index.jsp 页面中编写了一个测试 JSON 交互的表单,当单击“测试”按钮时执行页面中的 testJson() 函数。在该函数中使用了 jQuery 的 AJAX 方式将JSON 格式的数据传递给以“/testJson”结尾的请求中。

因为在 index.jsp 中使用的是 jQuery 的 AJAX 进行的 JSON 数据提交和响应,所以还需要引入 jquery.js 文件。本例引入了 WebContent 目录下 js 文件夹中的 jquery-3.2.1.min.js,读者可以在源程序中找到该文件。

6)创建控制器类

在 src 目录下创建 controller 包,并在该包中创建一个用于用户操作的控制器类 TestController,代码如下:

package TestController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import pojo.Person;
@Controller
public class TestController {/*** 接收页面请求的JSON参数,并返回JSON格式的结果*/@RequestMapping("testJson")@ResponseBodypublic Person testJson(@RequestBody Person user) {// 打印接收的JSON格式数据System.out.println("pname=" + user.getPname() + ",password="+ user.getPassword() + ",page" + user.getPage());;// 返回JSON格式的响应return user;}
}

在上述控制器类中编写了接收和响应 JSON 格式数据的 testJson 方法,方法中的 @RequestBody 注解用于将前端请求体中的 JSON 格式数据绑定到形参user 上,@ResponseBody 注解用于直接返回 Person 对象(当返回 POJO 对象时默认转换为 JSON 格式数据进行响应)。

7)运行 index.jsp 页面,测试程序

将 springMVCDemo05 应用发布到 Tomcat 服务器并启动服务器,在浏览器中访问地址“http://localhost:8080/springMVCDemo05/index.jsp”,运行效果如图 2 所示。


在图 2 所示的输入框中输入信息后单击“测试”按钮,当程序正确执行时页面将弹出显示输入信息的对话框,如图 3 所示。


同时,MyEclipse 的控制台将打印出相应数据,如图 4 所示。


从图 3 和图 4 所示的结果可以看出,编写的代码可以将 JSON 格式的请求数据转换为方法中的 Java 对象,也可以将 Java 对象转换为 JSON 格式的响应数据。

Spring MVC JSON数据交互(附带实例)相关推荐

  1. JSON数据交互和RESTful支持

    JSON数据交互和RESTful支持 SpringMVC在数据绑定的过程中,需要对传递数据的格式和类型进行转换,它既可以转换String类型的数据,也你能够转换JSON等其他类型的数据. JSON数据 ...

  2. springMVC JSON数据交互

    1.引入jackson 2.编写POJO 3.编写Controller 3.1.javabean接收 3.2.Map接收 4.访问测试 4.1.设置基本请求参数 4.2.设置请求参数,发送请求 为实现 ...

  3. json数据交互与@RequestBody

    @RequestBody @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为j ...

  4. (转)SpringMVC学习(十)——SpringMVC与前台的json数据交互

    http://blog.csdn.net/yerenyuan_pku/article/details/72514022 json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析 ...

  5. SpringMVC的json数据交互

    SpringMVC的json数据交互 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConver ...

  6. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    SpringMVC入门(二)-- 参数的传递.Controller方法返回值.json数据交互.异常处理.图片上传.拦截器 参考文章: (1)SpringMVC入门(二)-- 参数的传递.Contro ...

  7. 六、Springmvc json数据交互

    editItem.jsp <script type="text/javascript">$(function(){alert(111);var params = '{& ...

  8. ajax数据交互代码,Django中使用jquery的ajax进行数据交互的实例代码

    jquery框架中提供了$.ajax.$.get.$.post方法,用于进行异步交互,由于Django中默认使用CSRF约束,推荐使用$.get 示例:实现省市区的选择 最终实现效果如图: 将jque ...

  9. springMVC之与json数据交互方法

    2019独角兽企业重金招聘Python工程师标准>>> 因为我也要返回json数据.所以需要这个注解@ResponseBody,把Java对象转换成json字符串 注意:  1.@R ...

最新文章

  1. 推荐一个生成后端模拟数据的懒人工具:lazy-mock
  2. 8g ubuntu 树莓派4b_树莓派4B(4G版本)安装Ubuntu 19.10
  3. Netflix正式开源其API网关Zuul 2--转
  4. Java继承_这10道Java面试题!大部分的人回答不出来
  5. 2019年新年第一天,我也制定一下2019年计划,
  6. iphone7字体风格怎么改_苹果7怎么更改字体样式 苹果手机换好看的字体
  7. 腾讯云:开发者实验室
  8. 随笔之大学四年生活有感
  9. 重磅!实在智能首创“智能融合拾取”技术!
  10. Windows下的ARP命令
  11. 传统特征提取方法总结
  12. 成功解决Docker You have to remove (or rename) that container to be able to reuse that name.
  13. CogResultsAnalysisTool工具
  14. TI AWR1642毫米波雷达学习笔记之理论基础(2)
  15. matlab snr eb n0,转~~  SNR + Eb/N0
  16. python翻译器怎么用_给宝宝用Python写个支持翻译PDF文档的小软件
  17. SeAFusion:首个结合高级视觉任务的图像融合框架
  18. SDM(supervised descent method)算法
  19. 井通区块链技术在教育行业的落地应用
  20. 一个桔子功效等同五味药

热门文章

  1. VMware vSphere 功能特性比较 vsphere 6.5/6.7/7.0
  2. 转:vSphere 7简介:混合云的功能和技术
  3. Spring Boot学习总结(10)——SpringBoot打包成Docker镜像
  4. Java Web学习总结(33)——Java Web 程序员如何转型大数据
  5. 智能指针的释放_堆栈里的悄悄话——智能指针
  6. python用户登录三次机会的注释_用户登录(三次错误机会)(示例代码)
  7. 人眼分辨 PPI_扒一扒,PPI、LPI、DPI分辨率三兄弟~
  8. 循环机换变速箱油教程_汽车变速箱油啥时更换?重力换和循环机换有啥区别?注意啥?...
  9. DHCP服务器异常,上不了网解决办法
  10. LNMP架构介绍与搭建