SpringMVC - JSON数据交互

Json(JavaScript Object Notation),它是一种轻量级数据交换格式,格式简单,易于读写,目前使用特别广泛。

两种交互模式

① 请求json、输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便。
② 请求key/value、输出json。此方法比较常用。

@RequestBody 与 @ResponseBody

● @RequestBody:接收用户传入json串转成pojo

用于读取http请求的内容(字符串),通过Springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为Java对象并绑定到controller方法的参数上。

传统的请求参数:

save?item_id=001&item_name=王者荣耀&item_type=MOBA&item_price=0.0

现在的请求参数:使用POST请求,在请求体里面加入json数据

{
  "item_id" : "001",
  "item_name" : "王者荣耀",
  "item_type" : "MOBA",
  "item_price" : 0.0
}

● @ResponseBody:把pojo转成json串响应用户

用于将controller的方法返回的对象,通过springmvc提供的HttPMessageConverter接口转换为指定格式的数据,如:json、xml等,通过Response响应给客户端。

环境配置

对于Gson和jackson这两个json处理依赖,直接添加即可。
除此之外,其他的json解析器如fastjson都需要手动配置HttpMessageConverter。
实际上,在SpringMVC中,是由一个名叫HttpMessageConverter的类来提供对象到JSON字符串的转换的。
而SpringMVC默认就提供了Gson和Jackson的HttpMessageConverter,分别是org.springframework.http.converter.json.GsonHttpMessageConverter和MappingJackson2HttpMessageConverter。
对于其他的JSON解析器,只需要开发者手动配置一下HttpMessageConverter。

1、jar包准备 - 本例使用jackjson处理

Springmvc默认用MappingJacksonHttpMessageConverter对json数据进行转换,需要加入jackson的包,如下:

2、springmvc.xml文件中的配置 - 推荐使用注解驱动

① 如果配置文件中配置过注解驱动<mvc:annotation-driven />,则无需多余配置

② 如果没有配置注解驱动, 则需如下配置(不推荐使用这种方式)

<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
        </list>
    </property>
</bean> 

 额外说明

默认情况下,JSON处理的HttpMessageConverter在org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter类中,如果当前项目的classpath下有jackson或者gson的依赖,则会被该类自动加载,然后创建相应的HttpMessageConverter。

对于fastjson,由于系统未提供自动支持,因此需要开发者手动配置fastjson的HttpMessageConverter,配置方式如下:

① 引入fastjson依赖:fastjson.jar

② 加入配置

<mvc:annotation-driven>
    <!--不使用默认消息转换器 -->
    <mvc:message-converters register-defaults="true ">
        <!-- 配置fastjson支持 -->
        <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <!--顺序保持这样,避免IE下载出错 -->
                    <value>text/html;charset=UTF-8</value>
                    <value>application/json</value>
                </list>
            </property>
            <property name="features">
                <list>
                    <value>WriteMapNullValue</value>
                    <value>QuoteFieldNames</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

HttpMessageConverter承担两件事

① 将请求结果转为json
② 将浏览器发送来的json转为对象

请求JSON、响应JSON实现

请求

接收一个JSON格式的数据,需要框架帮我们自动转化为相关的Java对象。
客户端提交的数据需要通过 AJAX POST方式提交JSON数据
需要在形参中添加@RequestBody
@RequestBody:会把请求过来的JSON数据转成对象;主要用来接收前端传递给后端的json字符串中的数据。

响应

响应给客户端的是一个item对象 对应的JSON数据,
在处理方法中添加@ResponseBody注解

在springmvc中,直接接收json参数,如果参数中有日期的话,
不需要定义日期类型转换器,日期的转换由gson/jackson/fastjson来提供。

使用JSON数据交互

前端代码:

注意:
① json只能是在请求体中,因此,json只能放在post或者put请求中,
② 请勿使用get/delete请求去测试json参数传递。
function jsonData() {
    $.ajax({
        // 请求方式
        type : "post",
        // 请求的url地址
        url : "${pageContext.request.contextPath }/jsonData.do",
        // 发送的数据格式
        contentType : "application/json",
        // 发送数据,使用JSON.stringify将对象转换为字符串
        data : JSON.stringify({
            "item_id" : "007",
            "item_name" : "王者荣耀",
            "item_type" : "MOBA",
            "item_price" : 0.0
        }),
        // 回调的格式
        dataType : ‘json‘,
        // 回调函数
        success : function(data) {
            alert(data);
            alert(data.item_name);
        },
        error : function(xhr, ajaxOptions, thrownError) {
            alert("请求出错!" + item);
            return false;
        }
    });
}

Controller代码:

@ResponseBody
@RequestMapping(value = "jsonData.do")
public ItemInfo jsonData(@RequestBody ItemInfo item) {
    System.out.println("jsonData = " + item);
    return item;
}

测试结果:

- 浏览器发送的数据

- 后台接收

- 浏览器响应:返回一个json字符串

- alert弹窗

 

原文地址:https://www.cnblogs.com/Dm920/p/12148412.html

时间: 2024-10-24 09:30:52

SpringMVC - JSON数据交互的相关文章

springMVC学习(11)-json数据交互和RESTful支持

一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交互 1)环境准备: 加载json转换的jar包: springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转) jackson-core-asl-1.9.11.jar jackson-mapper-asl-1.9.11.

SpringMvc的JSON数据交互

为什么要进行json数据交互 json数据交互在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如webservice接口,传输json数据. 1.如果客户端传输的是json串的话 那么会使用一个注解 @RequestBody  来将json串转成java对象 @ResponseBody 来将java对象转成json串输出 2.如果客户端传输的是key/value串的话 那么会就不需要@RequestBody  因为不需要转 但是还是用 @ResponseBody 来

springmvc学习笔记(18)-json数据交互

springmvc学习笔记(18)-json数据交互 springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 添加json转换的依赖 配置json转换器 json交互测试 输入json串输出是json串 输入keyvalue输出是json串 本文主要介绍如何在springmvc中进行json数据的交互,先是环境准备和配置,然后分别展示了"输入json串,输出是json串"和"输入key/value,输出是json串"两种情况下

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

一.参数的传递 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Helvetica } 1.简单的参数传递 1 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ 2 * value:传入的参数名,required:是否必填,defaultValue:默认值 3 * } 4 */ 5 @RequestMapping("itemEdit") 6 public ModelAndView itemEdit(@R

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

json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析也比较方便,所以使用很普遍.在SpringMVC中,也支持对json数据的解析和转换,这篇文章主要总结一下在SpringMVC中如何和前台交互json数据. 两种交互形式 SpringMVC和前台交互主要有两种形式,如下图所示: 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在Controller类中会有不同的解析,但是在C

springmvc-高级参数绑定-映射-异常-json数据交互-拦截器

1.1. 高级参数绑定 1.1.1. 复制工程 把昨天的springmvc-web工程复制一份,作为今天开发的工程 复制工程,如下图: 粘贴并修改工程名为web2,如下图: 工程右键点击,如下图: 修改工程名,如下图: 1.1.2. 绑定数组 需求 在商品列表页面选中多个商品,然后删除. 需求分析 功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id删除商品信息. 我们演示可以获取id的数组即可 Jsp修改 修改i

ASP.NET MVC 4 中的JSON数据交互

前台Ajax请求很多时候需要从后台获取JSON格式数据,一般有以下方式: 拼接字符串 return Content("{\"id\":\"1\",\"name\":\"A\"}"); 为了严格符合Json数据格式,对双引号进行了转义. 使用JavaScriptSerialize.Serialize()方法将对象序列化为JSON格式的字符串 MSDN 例如我们有一个匿名对象: var tempObj=new

【SpringMVC学习09】SpringMVC与前台的json数据交互

json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析也比较方便,所以使用很普遍.在springmvc中,也支持对json数据的解析和转换,这篇文章主要总结一下springmvc中如何和前台交互json数据. 1. 两种交互形式 springmvc和前台交互主要有两种形式,如下图所示: 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在controller中会有不同的解析,但是在

SpringMVC的JSON数据交互(七)

[email protected]   (自动将请求的数据封装为对象) 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上. 传统的请求参数: itemEdit.action?id=1&name=zhangsan&age=12 现在的请求参数: 使用POST请求,在请求体里面加入json数据 { "i