1、json数据格式在接口调用、html页面中比较常用,json格式比较简单,解析还比较方便。这里我们看springmvc进行json交互。
2、json数据交互有两种情况:
1
说明:1、请求json、输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转换成json串,不太方便;2、请求的是key/value、输出json,此方法比较常用。
3、环境准备
在试验时我们需要两个用于解析json数据的jar包:
jackson-core-asl-1.9.11.jar
jackson-mapper-asl-1.9.1.jar
4、配置json转换器(工程springmvc-mybatis08)
在springmvc.xml
在注解适配器中加入messageConverters
说明:这里我们是在适配器中进行配置,也就是说适配器和映射器是分开配置的,但是如果使用配置适配器和映射器,那么上面的json转换器就无需配置了。
5、json交互的测试:输入的是json串
相关的前台页面WebRoot/jsonTest.jsp
isELIgnored="false"%>
json交互测试//请求json响应json
function requestJson(){
$.ajax({
type:"post",
url:"${pageContext.request.contextPath }/requestJson.action",
contentType:"application/json;charset=utf-8",
data:'{"name":"测试商品","price":99.9}',
success:function(data){
alert(data);
}
});
}
//请求key/value响应json
function responseJson(){
$.ajax({
type:"post",
url:"${pageContext.request.contextPath }/responseJson.action",
data:'name=手机&price=99.9',/*不需要指定contentType,因为默认就是key/value类型*/
success:function(data){
alert(data);
}
});
}
说明:这里我们先看第一种情况,这种情况是请求的是json,而相应的也是json。Controller如下:
JsonTest.java
package cn.itcast.ssm.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.itcast.ssm.pojo.Items;
import cn.itcast.ssm.pojo.ItemsCustom;
//json交互测试
@Controller
public class JsonTest {
//请求json(商品信息),输出json(商品信息)
/*
* @RequestBody将请求的商品信息的json串转换成java对象
* @ResponseBody将java对象转换成json输出
* */
@RequestMapping("/requestJson")
public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom){
return itemsCustom;
}
}
说明:这个方法中,@RequestBody将请求的商品信息的json串转换成java对象,而@ResponseBody将java对象转换成json输出。下面我们使用地址http://localhost:8080/springmvc-mybatis08/jsonTest.jsp进行访问,点击第一个按钮。但是这里总是出现一个错误:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
在网上找了半天,没找到答案。
6、请求key/value,返回json
这种情况下,我们在前台页面中不需要设置contentType,因为默认就是发送key/value,下面给出Controller方法:
@RequestMapping("/responseJson")
public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom){
return itemsCustom;
}
说明:在测试此种数据交互的时候也出现错误,暂时还未解决。
7、问题解决
之后我怀疑是jar出现错误,于是将之前的jar包使用下面的包进行了替换:
jackson-annotations-2.8.0.jar
jackson-core-2.8.0.jar
jackson-databind-2.8.0.jar
然后进行试验,就没问题了,第一种情况下试验结果为
2
3
4
第二种情况的试验结果为:
5
6
7
说明:在我打开之前的jar包和后面的jar进行查看的时候发现目录结构都不一样,这表示网址也不一样,一个是org结尾,一个是com结尾,因为这是初次学习这个工具,不知道这前后jar包有什么区别,留待以后再研究。