Spring MVC使用篇(十五)—— JSON交互

1、数据交互方式的改变

  在传统的企业级应用中,多个系统之间的交互经常使用WebService来实现,这种模式可以跳出不同系统之间编程语言、操作系统等硬件条件的限制,实现不同系统之间的弹性交互。WebService的实现模式就是,所有系统的数据传输都遵循一种固定的格式,拼接需要交互的数据。解析时也按照约定的解析规则解析。

  现如今由于移动互联网的兴起,简介的JSON格式成为很多系统之间进行交互的主要格式。移动端的前台系统(Android或IOS)与后台交互时,普通使用HTTP协议进行JSON格式信息的传输,以实现移动系统前后端之间的信息交互。还有一些网页异步加载功能,也是利用JavaScript语言或相关插件(JQuery等前端脚本框架)实现Ajax异步数据请求,与后台进行JSON格式的HTTP信息交互。

2、JSON数据格式

  JSON的数据格式规则十分简洁,书写格式为“数据名称:值”,组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开,最外层添加一对花括号即可:

{"username":"Jack"}

  当有多个参数时,使用英文逗号隔开。JSON中的值可以有多种类型,每种类型有不同的表现形式,如下表所示:

格式 JSON格式
数字(整数或浮点数) {“age”:23,“height”:172.45}
字符串(在双引号中) {“name”:“张三”}
逻辑值(true或false) {“isEmpty”:true}
数组(在方括号中) {“people”:[{“firstName”:“Brett”,“lastName”:“Mclaughlin”,“email”:“aaa”},{“firstName”:“Jason”,“lastName”:“Hunter”,“email”:“bbb”},{“firstName”:“Elliotte”,“lastName”:“Harold”,“email”:“ccc”}]}
对象(在花括号中) {“people”:{“firstName”:“Brett”,“lastName”:“Mclaughlin”,“email”:“aaa”}}
空(null) {“tellphonenumber”:null}

3、Spring MVC对JSON格式数据的处理

  早期JSON的组装和解析都是通过手动编写代码实现的,种方式效率不高,所以后来有许多的关于组装和解析JSON格式信息的工具类出现,如json-lib、org-json、fast-json及jackson等,可以解决JSON交互的开发效率。

  Spring MVC同样为开发者提供了一种简洁的实现不同数据格式交互的机制(JSON、XML以及其他数据格式),其会将前台传来的JSON/XML等格式信息自动转换为相应的包装类,或者将输出的信息转换为JSON/XML等格式的数据。

  Spring MVC主要利用类型转换器(messageConverters)将前台信息转换成开发者需要的格式。然后在相应的Controller方法接收参数前添加@RequestBody注解,进行数据转换,或在方法的返回值类型处添加@ResponseBody注解,将返回信息转换成相关格式的数据。

4、实现前后端JSON交互

4.1 演示项目需求

  这里为了演示前后端实现JSON数据的交互,需求为:如果客户端请求的是JSON信息,服务器端就将JSON格式信息转换成相关的包装类型参数,在返回信息时,统一使用JSON格式输出。

4.2 导入依赖的jar包

  Spring MVC对于JSON的解析和组装时基于开源工具类“jackson”的,所以要使用Spring MVC进行JSON数据交互,必须引入jackson的两个依赖jar包“jackson-core-asl.jar”和“jackson-mapper-asl.jar”,将它们放置在演示项目工程的lib下并加载到编译环境,如下所示:
在这里插入图片描述

4.2 配置类型转换器

4.2.1 基于配置文件的开发

  在导入了依赖的jar包后,需要在类加载配置文件springmvc.xml中,为处理器适配器HandlerAdapter配置类型转换器列表messageConverters,并在其中添加需要的类型转换器。这样当请求到达处理器适配器层时,配置的@RequestBody和@ResponseBody注解就会利用具体的类型转换器messageConverter将请求信息转换为指定的格式。具体配置如下:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
        </list>
    </property>
</bean>

  由上面的配置可以看到,为类型转换器列表messageConverters的list配置一个JSON类型的转换器MappingJackson2HttpMessageConverter,这样只要请求到达Controller方法,标注@RequestBody和@ResponseBody注解的参数都会自动执行类型转换,目标类型就是配置的具体的类型转换器,这里是JSON格式的转换器。

4.2.2 基于注解的开发(演示项目采用的方式)

  在基于注解的开发配置中,由于已经配置了“<mvc:annotation-driven />”,其中Spring MVC已经帮助配置了注解的处理器适配器和映射器,即DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,同时为注解的处理器适配器配置类型转换器,这里为AnnotationMethodHandlerAdapter初始化7个类型转换器,如下表所示:

转换器类 作用
ByteArrayHttpMessageConverter 负责读取和写入二进制格式的数据
StringHttpMessageConverter 负责读取和写入字符串格式的数据
ResourceHttpMessageConverter 负责读取和写入资源文件数据
SourceHttpMessageConverter 负责读取和写入xml中javax.xml.transform.Source定义的数据
XmlAwareFormHttpMessageConverter 负责读取和写入基本的xml格式数据
Jaxb2RootElementHttpMessageConverter 通过Jaxb2读写xml信息,将请求消息转换到标注XmlRootElement和XmlType注解的类中
MappingJacksonHttpMessageConverter 负责读取和写入JSON格式的数据

  其中就有需要的JSON类型转换器,所以如果已经配置了“<mvc:annotation-driven />”,就无须再单独配置了。因此,在日常开发中,如果没有特殊要求,使用自动注解配置,可以提高开发效率。

4.3 创建前端测试页面

  在“WEB-INF/jsp”下创建名为“json”的文件夹,该文件夹用于存放该测试案例页面。在该文件夹下创建名为“json.jsp”的JSP页面,用于显示前端测试页面。在该野蛮上设置一个textarea输入框,在其中可以编写相关的JSON字符串信息,然后单击下方的“发送“按钮,可以将JSON格式信息发送到后台。具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
    <title>Json Test</title>
  </head>
  <body>
    <textarea id="jsonMsg" cols="30" rows=
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值