SpringMVC JSON数据交互
2020-02-01 16:01:33来源:博客园 阅读 ()
SpringMVC JSON数据交互
在SpringMVC中使用json,需要添加Jackson的3个jar包:
- jackson-core.jar jackson的核心包
- jackson-datebind.jar jackson数据绑定需要的包
- jackson-annotations.jar 使用jackson注解需要的包
Jackson jar包的下载
使用maven是最简单的,jar包只能到maven仓库下载:
https://mvnrepository.com/search?q=jackson
前三个分别对应Jackson的3个jar包,需要分别下载。
使用流程
以根据学号查询学生信息为例。
(1)添加jackson的3个jar包
(2)在web下新建文件夹js,把jquery.min.js放进去
(注意是web文件夹下,不是WEB-INF下)
(2)com.chy.model.Student
@Component @Scope("prototype") public class Student { private int id; private String name; private int age; private float score; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public float getScore() { return score; } public void setScore(float score) { this.score = score; } }
每个学生都不相同,设计为多例。
这个bean作为数据传输对象,持久层(dao)用Student对象来封装查询结果,传回给业务层(controller),业务层将Student对象作为响应传给视图层。
(4)前端使用ajax发起请求
<body> <form> <%--使用的是jq的id选择器$("#xx"),所以只能用id,不能用name--%> 学号:<input type="text" id="id"><br /> <button type="button" id="btn">查询学生信息</button> </form> <p id="show"></p> <%-- 开头不能加/,但可以加 ${pageContext.request.contextPath}/ --%> <%-- <script src="${pageContext.request.contextPath}/js/jquery-3.4.1.min.js"></script> --%> <script src="js/jquery-3.4.1.min.js"></script> <script> $("#btn").click(function () { $.ajax({ //开头不能加/,但可以加 ${pageContext.request.contextPath}/ url:"studentController/queryStudent", type:"post", // 传给后台的数据类型、使用的字符集。可以缺省,因为data:{},看到{}就会自动作为json处理 // contentType:"application/json;charset=utf-8", //传给后台的数据,json形式,key是String类型,value可以是多种类型,键值对之间逗号分隔 data:{"id":$("#id").val()}, //期待的返回值类型(回调函数的参数类型) dataType:"json", error:function () { console.log("ajax请求数据失败!"); }, success: function (data) { //浏览器把接受到的json数据作为js对象,可通过.调用属性 var info = "姓名:" + data.name + ",年龄:" + data.age + ",成绩:" + data.score; $("#show").text(info); } }) }); </script> </body>
如果要请求纯文本(字符串),将dateType的值改为text。
(4)后台使用controller处理ajax请求
@org.springframework.stereotype.Controller @RequestMapping("studentController") public class StudentController{ private Student student; @Autowired public void setStudent(Student student) { this.student = student; } @RequestMapping("/queryStudent") @ResponseBody public Student queryStudent(int id) { System.out.println(id); //此处省略连接数据库查询 student.setName("chy"); student.setAge(20); student.setScore(100); return student; } }
可以用简单数据类型接收前端传来的数据,也可以使用Bean来接收(会赋给同名的属性)。
很多教程说要在业务方法的参数前面加@RequestBody,才能将ajax传来的数据转换为需要的类型;
事实上,随着版本更替,高版本SpringMC内建的转换器已经可以将ajax传来的数据转换需要的类型,加@RequestBody反而会出错。
需要在业务方法上添加注解@ResponseBody,此处解会自动将返回值添加到响应体中,来响应ajax请求。
不管请求的是text、还是json,都需要使用@ResponseBody。
如果请求的是text,将返回值类型写成String;
如果请求的是json,返回值可以写成bean(返回json对象,比如请求一个学生的信息),也可以写成List(返回json数组,比如请求多个学生的信息)。
(5)springmvc的配置
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--配置包扫描--> <context:component-scan base-package="com.chy.controller,com.chy.model" /> <!--注解驱动,会自动使用jackson的json转换器,并自动注册HandlerMapping、HandlerAdapter,所以我们不必再配置HandlerMapping、HandlerAdapter--> <mvc:annotation-driven /> <!--配置资源映射,配置过的文件会被DispatcherServlet放行(不交给controller处理)--> <mvc:resources mapping="/js/" location="/js/" /> <!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/" /> <!--后缀--> <property name="suffix" value=".jsp" /> </bean> </beans>
踩过的坑
一看到这种以mvc开头的元素:
<mvc:annotation-driven /> <mvc:resources mapping="/js/" location="/js/" />
就知道IDEA又要导错约束:
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/cahce" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/mvc/spring-cache.xsd">
将cache改为mvc,xsi中对应的2处也要改。
json转换器的2种配置方式
我们在controller中使用了@ResponseBody、@RequestBody2个注解来进行json——java类型之间的转换,这2个注解需要jackson提供的类型转换器的支持。
配置方式一:
<!--配置HandlerMapping--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> <!--配置HandlerAdapter--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <!--使用list注入要使用的messageConverters--> <property name="messageConverters"> <list> <!--Jackson的json转换器--> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list> </property> </bean>
配置方式二:
<mvc:annotation-driven />
与方式一的配置等价。
ps:
json,即Jackson的缩写,官方在github上的项目名不是json,而是fastxml,更快的xml。
json可以看做是xml的变种,早些年基本都是用xml做数据交互,近些年随着json的兴起,都使用json代替xml了。
jackson的jar包中不仅提供了json转换器,也提供了xml转换器。
静态资源配置
参考:https://www.cnblogs.com/chy18883701161/p/12249175.html
原文链接:https://www.cnblogs.com/chy18883701161/p/12246952.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- Flink 如何分流数据 2020-06-11
- 数据源管理 | Kafka集群环境搭建,消息存储机制详解 2020-06-11
- 大公司都在做的大数据平台,为你精选这一份书单 2020-06-09
- switch循环所支持的数据类型 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash