SpringMVC json数据交互结合RESTful支持

 

本文主要阐述:

SpringMVC json数据交互的过程及其细节

json结合RESTful支持开发小案例

 

json数据交互

数据交互流程

由上述流程交互主要分为两种情况

  1. 客户端请求的是json串,输出的是json串;
  2. 客户端请求的是key/value,输出的是json串。

 

测试环境搭建

jar包

springmvc用Jackson包下的@requestBody@responseBody注解转换json

js链接

提供前端页面转换json串的ajax模板

 

测试结构搭建

在WebRoot下创建js文件夹:引入jquery-1.4.4.min.js

在WebRoot下创建测试jsp页面:JsonTest.jsp

在cn.ssm.xhchen.controller下创建JsonController.java

 

配置json转换器和解析静态资源

转换器

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

注意:如果适配器交给mvc自动注册就不需要配置转换器

<mvc:annotation-driven ></mvc:annotation-driven>

解析静态资源

<!-- 解析静态资源 -->
<mvc:resources location="/js/" mapping="/js/**"/>

 

测试输入json,输出json

编写JsonTest.jsp页面

引入js文件

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>

设置测试按钮

<input type="button" onclick="requestJson()" value="输入json串,输出json串">

ajxa转换json

函数requestJson(),请求为json串需要指定contentType(application/json);数据格式为json数据。

// 输入json串,输出json串
function requestJson() {
	$.ajax({
		type:'post',
		url:'${pageContext.request.contextPath }/json/requestJson.action',
		contentType:'application/json;charset=utf-8',
		// json串数据格式
		data:'{"items_name":"手机","items_price":"998","items_detail":"双摄16G 4G"}',
		success:function(date){
		    alert(date.items_price);
		}
	});
}

创建JsonController.java

@requestBody 将json串转换为java对象

@responseBody 将java对象转换为json串输出

// @RequestBody 把请求商品信息的json串转换为ItemsCustomer对象
// @ResponseBody 将ItemsCustomer对象转换为json串输出
@RequestMapping("/requestJson")
public @ResponseBody ItemsCustomer requestJson(@RequestBody ItemsCustomer itemsCustomer) {
		
    // 一系列数据操作...
		
    return itemsCustomer;

}

 

测试结果

请求头信息

content-Type:application/json;charsetset=utf-8

响应头信息

content-Type:application/json;charsetset=utf-8

请求json的串

响应的json数据

 

测试输入key/value,输出json

编写JsonTest.jsp页面

设置测试按钮

<input type="button" onclick="responseJson()" value="输入key/value,输出json串">

ajxa转换json

函数responseJson(),请求为key/value不需要指定contentType,因为默认为key/value类型;数据格式为key/value。

// 输入key/value,输出json串
function responseJson() {
	$.ajax({
		type:'post',
		url:'${pageContext.request.contextPath }/json/responseJson.action',
		/* contentType:'application/json;charset=utf-8', */
		// key/value数据格式
		data:'items_name=手机&items_price=998&items_detail=双摄16G 4G',
		success:function(date){
		    alert(date);
		}
	});
}

创建JsonController.java

不需要@requestBody将json串转为java对象

@responseBody 将java对象转换为json串输出

@RequestMapping("/responseJson")
public @ResponseBody ItemsCustomer responseJson(ItemsCustomer itemsCustomer) {
		
    // 一系列数据操作...
		
    return itemsCustomer;
}

 

测试结果

请求头信息

content-Type:application/x-www-from-urlencoded(key/value)

响应头信息

content-Type:application/json;charsetset=utf-8

请求json的串

响应的json数据

 

综上可知,请求json,输出json需要在前端进行json转换,不方便,所以不常用;请求key/value,输出json则与其相反,较为常用。

 

json结合RESTful

在案例开始前先了解一下什么是RESTful支持?

RESTful架构,就是目前最流行的一种互联网软件架构,一个开发理念,是对http很好的诠释。它结构清晰、符合标准、易于理解、扩展方便,得到越来越多网站的采用。

 

主要包括以下3个功能:

1、对url进行规范,写RESTful格式的url

非REST的url:http://...../queryItems.action?id=001&type=T01

REST的url:http://..../items/001  url简洁,将参数通过url传到服务端

2、http的方法规范

不管是删除、添加、更新等使用url是一致的,如果进行删除,需要设置http的方法为delete,同理添设置。后台controller方法:判断http方法,如果是delete方法执行删除,同理处理。

3、对http的contentType规范

请求时指定contentType,要json数据,设置成json格式的type。

 

案例需求

查询商品信息,返回json数据。

 

编写controller

url映射使用RESTful风格的url,将查询商品信息的id传入controller。通过@ReeponseBody把java对象输出json。

// /itemsView/{id} {xxx}占位符
// @PathVariable 获取占位符中的参数,把模板变量映射到方法的形参中
// @PathVariable("id") 指定占位符与形参一致,如果名字一致可以不用指定
@RequestMapping("/itemsView/{id}")
public @ResponseBody ItemsCustomer itemsView(@PathVariable("id") Integer id) throws Exception {
		
    // 调用itemsService方法查询
    ItemsCustomer itemsCustomer = itemsService.findItemsById(id);
		
    return itemsCustomer;
}

/itemsView/{id} {xxx}占位符。

@PathVariable 获取占位符中的参数,把模板变量映射到方法的形参中。

@PathVariable("id") 指定占位符与形参一致,如果@RequestMapping中占位名字和形参一致可以不用指定。

 

前端控制器配置

Web.xml下配置RESTful的前端控制器

<!-- 配置RESTful前端控制器 -->
<servlet>
    <servlet-name>spring_rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!-- contextConfigLocation配置springmvc加载的配置文件 -->
    <init-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>spring_rest</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

 

测试案例一

http://localhost:8080/ssm/json/itemsView/1

请求的json数据

响应json数据

 

测试案例二

编写JsonTest.jsp页面

设置测试按钮

<input type="button" onclick="itemsView()" value="根据id查询商品">

ajxa转换json

函数itemsView (),请求为json串需要指定contentType(application/json;charset=utf-8);数据格式为json数据。

// 根据id查询商品
function itemsView() {
	$.ajax({
		type:'post',
		url:'${pageContext.request.contextPath}/json/itemsView/1.action',
		contentType:'application/json;charset=utf-8',
		success:function(date){
		    alert(date.items_price);
		}
        });
}

 

测试结果

请求头信息

响应头信息

请求的json数据

响应的json数据

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值