1、 为什么要进行JSON数据交互
JSON 数据格式在接口调用中、html页面中比较常用。
JSON格式比较简单,解析比较方便。
比如:webservice接口、传输JSON数据。
2、springMVC进行JSON交互
1、 请求JSON、输出JSON,要求请求的是JSON串,需要在前端页面将请求内容转成JSON,不太方便。
2、 请求key/value、输出JSON。此方法比较常用。
3、 环境准备
3.1加载JSON的jar包
springMVC中使用Jackson的包进行JSON转换(@requestBody和@responseBody使用下面的包进行JSON转换),如下:
3.2 配置JSON转换器
在注解适配器中加入messageConverters
<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters"></property>
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</list>
</bean>
注意:如果使用<mvc:annotation-driven/>
则不用定义上边的内容。
4、 JSON交互测试
4.1输入的是JSON串,输出是JSON串
JSP页面
使用Jquery的ajax提交JSON串,对是输出的JSON结果进行解析。
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
//请求的JSON,输出JSON
function requestJson(){
$.ajax({
type:'post',
url:'requestJson.action',
contentType:'application/json;charset=utf-8',
//数据格式是JSON串,商品信息
data:'{"name":"手机","price":999}',
success:function(){//返回JSON结果
alert(data .name);
}
});
}
</script>
<input type="button" onclick="requestJson()" value="请求的JSON,输出JSON"/>
<input type="button" onclick="responseJson()" value="请求key/value,输出JSON"/>
Controller
//请求JSON(商品信息),输出JSON(商品信息)
//@RequestBody将请求的商品信息的JSON串转成itemsCustom对象
//@ResponseBody将itemsCustom对象转换成JSON输出
@RequestMapping("/requestJson");
public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom){
//@ResponseBody将itemsCustom转成JSON输出
return itemsCustom;
}
4.2输入key/value,输出是JSON串
JSP页面
使用Jquery的ajax提交key/value串,对是输出的JSON结果进行解析。
function responseJson(){
$.ajax({
type:'post',
url:'responseJson.action',
//请求是key/value这里不需要contentType,因为默认就是key/value类型
//contentType:'application/json;charset=utf-8',
//数据格式是JSON串,商品信息
data:'name=手机&price=999',
success:function(){//返回JSON结果
alert(data .name);
}
});
}
Controller
//请求key/value(商品信息),输出JSON(商品信息)
@RequestMapping("/responseJson");
public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom){
//@ResponseBody将itemsCustom转成JSON输出
return itemsCustom;
}