Spring MVC JSON数据交互(附带实例)
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数据交互(附带实例)相关推荐
- JSON数据交互和RESTful支持
JSON数据交互和RESTful支持 SpringMVC在数据绑定的过程中,需要对传递数据的格式和类型进行转换,它既可以转换String类型的数据,也你能够转换JSON等其他类型的数据. JSON数据 ...
- springMVC JSON数据交互
1.引入jackson 2.编写POJO 3.编写Controller 3.1.javabean接收 3.2.Map接收 4.访问测试 4.1.设置基本请求参数 4.2.设置请求参数,发送请求 为实现 ...
- json数据交互与@RequestBody
@RequestBody @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为j ...
- (转)SpringMVC学习(十)——SpringMVC与前台的json数据交互
http://blog.csdn.net/yerenyuan_pku/article/details/72514022 json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析 ...
- SpringMVC的json数据交互
SpringMVC的json数据交互 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConver ...
- SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
SpringMVC入门(二)-- 参数的传递.Controller方法返回值.json数据交互.异常处理.图片上传.拦截器 参考文章: (1)SpringMVC入门(二)-- 参数的传递.Contro ...
- 六、Springmvc json数据交互
editItem.jsp <script type="text/javascript">$(function(){alert(111);var params = '{& ...
- ajax数据交互代码,Django中使用jquery的ajax进行数据交互的实例代码
jquery框架中提供了$.ajax.$.get.$.post方法,用于进行异步交互,由于Django中默认使用CSRF约束,推荐使用$.get 示例:实现省市区的选择 最终实现效果如图: 将jque ...
- springMVC之与json数据交互方法
2019独角兽企业重金招聘Python工程师标准>>> 因为我也要返回json数据.所以需要这个注解@ResponseBody,把Java对象转换成json字符串 注意: 1.@R ...
最新文章
- 推荐一个生成后端模拟数据的懒人工具:lazy-mock
- 8g ubuntu 树莓派4b_树莓派4B(4G版本)安装Ubuntu 19.10
- Netflix正式开源其API网关Zuul 2--转
- Java继承_这10道Java面试题!大部分的人回答不出来
- 2019年新年第一天,我也制定一下2019年计划,
- iphone7字体风格怎么改_苹果7怎么更改字体样式 苹果手机换好看的字体
- 腾讯云:开发者实验室
- 随笔之大学四年生活有感
- 重磅!实在智能首创“智能融合拾取”技术!
- Windows下的ARP命令
- 传统特征提取方法总结
- 成功解决Docker You have to remove (or rename) that container to be able to reuse that name.
- CogResultsAnalysisTool工具
- TI AWR1642毫米波雷达学习笔记之理论基础(2)
- matlab snr eb n0,转~~ SNR + Eb/N0
- python翻译器怎么用_给宝宝用Python写个支持翻译PDF文档的小软件
- SeAFusion:首个结合高级视觉任务的图像融合框架
- SDM(supervised descent method)算法
- 井通区块链技术在教育行业的落地应用
- 一个桔子功效等同五味药
热门文章
- VMware vSphere 功能特性比较 vsphere 6.5/6.7/7.0
- 转:vSphere 7简介:混合云的功能和技术
- Spring Boot学习总结(10)——SpringBoot打包成Docker镜像
- Java Web学习总结(33)——Java Web 程序员如何转型大数据
- 智能指针的释放_堆栈里的悄悄话——智能指针
- python用户登录三次机会的注释_用户登录(三次错误机会)(示例代码)
- 人眼分辨 PPI_扒一扒,PPI、LPI、DPI分辨率三兄弟~
- 循环机换变速箱油教程_汽车变速箱油啥时更换?重力换和循环机换有啥区别?注意啥?...
- DHCP服务器异常,上不了网解决办法
- LNMP架构介绍与搭建