小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

SpringMVC学习——SpringMVC与前台的json数据交互

Java 额外说明

收录于:52天前

json数据格式常用于接口调用和HTML页面。 json格式比较简单,易于解析,因此被广泛使用。在SpringMVC中,还支持json数据的解析和转换。本文主要总结了SpringMVC中如何与前台进行json数据交互。

两种交互形式

SpringMVC和前台交互主要有两种形式,如下图所示: 

可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在Controller类中会有不同的解析,但是在Controller类中返回的json格式的数据都是一样的。下面来具体分析一下SpringMVC是如何与前台进行json数据的交互的。在讲之前先认识两个注解。

@RequestBody注解

@RequestBody注解用于读取http请求的内容(字符串),通过SpringMVC提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到Controller类方法的参数上。 
本例子应用:@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象。如下: 

@ResponseBody注解

@ResponseBody注解用于将Controller类的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json、xml等,通过Response响应给客户端。 
本例子应用:@ResponseBody注解实现将Controller类方法返回对象转换为json响应给客户端,如下: 


经过我如此细致地讲解,想必大家已认识到这两个注解的意思了。好了,下面来具体分析一下SpringMVC是如何与前台进行json数据的交互的。

环境的准备

加载json的jar包

SpringMVC默认用MappingJacksonHttpMessageConverter对json数据进行转换,需要加入jackson的包,又因为SpringMVC3和SpringMVC4针对json交互的jar包有区别,我用的是SpringMVC4,需要导入如下三个jar包: 
 
读者千万不要忘了导入jQuery的类库,因为我是使用jQuery的ajax提交json串的,就像下图这样: 

配置json转换器

有两种方法可以配置 json 转换器。如果配置了注解适配器org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter,则需要在适配器中配置json转换器,如下:

<!-- 用于将对象转换为 JSON  -->  
<bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter">  
    <property name="supportedMediaTypes">  
        <list>  
            <value>text/plain;charset=UTF-8</value>  
        </list>  
    </property>  
</bean>  
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>  

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
    <property name="messageConverters">  
        <list>  
            <ref bean="stringConverter" />  
            <ref bean="jsonConverter" />  
        </list>  
    </property>  
</bean>  

但是如果使用<mvc:annotation-driven />注解驱动的话就不用以上的配置了,默认已经配好了。建议使用这种,比较方便。

json交互的测试

这里,我使用jQuery的ajax提交json字符串并解析输出json结果。前端程序如下:

<button onclick="sendJson()">json数据交互测试</button>
<script type="text/javascript">
    function sendJson() {
        $.ajax({
            type:"post",
            url:"${pageContext.request.contextPath }/item/json_test.action",
            data:'{"id":"1","name":"电冰箱","price":"1999"}',
            contentType:"application/json;charset=utf-8",
            success:function(data) {
                alert(data.id + ":" + data.name);
            }
        });
    }
</script>

那么前台itemList.jsp页面的内容就应改造为: 

接着编辑ItemController类,并在该类中编写如下方法:

// JSON数据交互
// @RequestBody:接收json数据并转换成pojo对象
// @ResponseBody:响应json数据,把pojo对象转换成json数据并响应
@RequestMapping("/json_test")
@ResponseBody
public Items jsonTest(@RequestBody Items items) {
    return items;
}

由于id、name、price这三个属性是前端传过来的,所以后端使用Items类来接收它们。这个类也具有这三个属性。关键点是@RequestBody注解,它将前台传过来的json字符串转换成items对象,然后将对象返回回来。 items对象转换为json格式,通过@ResponseBody注解返回给前台。这样前台收到后就可以解析了。我们来看看测试结果:

解析了。我们看一下测试的结果: 

响应的结果,null表示空值而已,这里就返回了原对象,也就只有id、name和price属性。 

springmvc与前台json数据的交互就总结这么多。

转自:https://blog.csdn.net/yerenyuan_pku/article/details/72514022

. . .

相关推荐

额外说明

Docker安装Python3教程

本文主要介绍如何通过Docker安装Python3。 目录 一、拉取镜像 二、挂载目录 三、创建容器 四、进入容器 五、运行脚本 (1)编写脚本 (2)上传脚本 (3)运行脚本 一、拉取镜像 本次教程,我们使用的版本是3.7版本,你如果需要使用其它版本,

额外说明

leetcode练习14(找到最长的公共字符串)

题目:输出一个字符串数组中所有字符串的最大公共字符串。 题解:简单题,不解释,直接上代码 class solution { private: public: string extract(string obj1, string obj2); s

额外说明

eclipse-embedcpp 手动安装 CMSIS 包

1. 点击更新CMSIS Pack库目录 这一步必须的,否则无法下一步手动安装库 完成库目录更新之后 完成之后 .cache文件夹下生成 .content_https___www_keil_com_pack_index_pidx.xml 如果没有更新图标

额外说明

JVM14_Class文件结构详细信息、幻数、Class文件版本、常量池、访问标识符(或标志)、类索引 |父类索引|接口索引集合、字段|方法|属性表集合

文章目录 ①. class文件结构细节概述 ②. class文件的魔数是什么 ③. 如何确保高版本的JVM可执行低版本的class文件? ④. 常量池(class文件的基石) ①. 什么是常量池? ②. 常量池计数器 ③. 常量池表 ④. 字面量和符号引

额外说明

Unity VR:如何修改fbx动画

用Blender导入进行编辑 动画可能不含可视元素,需要导入带基本Model的Base版本的fbx 导入后切Pose模式,对各个顶点进行调整后输出fbx 一般动画的话只需要导出armature,(Bake Animation自动选中) 注意,此时录制状态

额外说明

【Linux网络编程】网络编程初体验

文章目录 前言 目标与安排 网络编程核心概念与模式 核心概念 初探网络编程接口 客户端编程初体验 The End 前言 虚拟机类型:Ubuntu 20.04.1,代码编写:vs code windows连接工具NetAssist:链接:https://p

额外说明

【Java 基础篇】Java Stream流详解

文章目录 导言 一、Stream流的概念 二、Stream流的使用方法 三、并行流操作 四、Stream流与集合的比较 总结 导言 Java Stream流是Java 8引入的一种新的数据处理方式,它提供了一种高效、便利的方法来处理集合数据。Stream

额外说明

VS2019配置项目环境依赖的方法

VS2019配置项目环境依赖的方法 在复杂工程中,一个项目的运行可能需要众多依赖库的支持,例如ORBSLAM需要g2o、Opencv等。此时一个良好的环境依赖部署方法对工程的条理性至关重要,下面详细阐述 1 构造依赖目录 |--3rd(ThirdPart

额外说明

.net mvc

http://weblogs.asp.net/scottgu/archive/2008/02/12/asp-net-mvc-framework-road-map-update.aspx    

ads via 小工具