*springmv之JSON数据交互
1.springmvc怎么解析json串,怎么将java对象解析为接送串
springmvc 与 json 数据的转换,通过指定处理器适配器配置 json转换器依赖Jackson可以轻松的将Java对象转换成json对象,将 json 对象轻松转换为java对象,然后与Handler方法形参进行参数绑定。
我们还需要知道Jackson还可以解析xml等其他文件
2.springmvc的两个注解
1)@RequestBody :用于解析 http 请求体为 json 数据的请求,springmvc 中消息转换器接口(HttpMessageConverter)将 josn 数据转换成对象 java 对象
2)@ResponseBody :将Handler中方法的返回对象(即java对象),通过消息转换器接口(HttpMessageConverter)将 java 对象转换成相应的 json 数据,并 json 数据响应于客户端请求端(同步请求端或异步请求端)。
3.两种springmvc与json数据交互场景
1)请求端请求的请求体为 key/value 数据,服务端响应请求客户端 json 格式数据
2)请求端请求的请求体为 json 数据,服务端响应请求客户端 json 格式数据
4.两种场景的实现
1) 常用的异步请求的实现与springmvc进行json交互
场景1:
客户端使用JQuery提交异步key/value请求ajax实现
<script type="text/javascript">
function keyvalueRequest(){
$.ajax({
type:'post',
url:'http://localhost:8080/SSM/item/queryJson',
/* contentType默认application/x-www-form-urlencoded,key/value格式请求体*/
data:'name=Ad',
success:function(data){
alert(JSON.stringify(data));
},
error:function(){
alert('error');
}
});
}
</script>
<input type="button" onclick="keyvalueRequest()" value="key/value请求" />
@RequestMapping("/item") Controller 处理器中接收请求的带pojo形参方法的实现:
springmvc根据请求参数数据绑定pojo类相应属性名。
springmvc通过@Response注解将return的java对象转换json数据响应客户端。
@RequestMapping("/queryJson")
public @ResponseBody List<Item> queryToJSON(Item item) throws Exception {
List<Item> items = itemMapper.queryItemsByPo(item);
return items;
}
场景2:
客户端使用JQuery提交异步json数据请求ajax实现
<script type="text/javascript">
function jsonRequest(){
$.ajax({
type:'post',
url:'http://localhost:8080/SSM/item/queryJson',
/* dataType默认application/x-www-form-urlencoded,key/value格式请求体*/
contentType:'application/json',
data:'{"name":"Ad"}',
success:function(data){
alert(JSON.stringify(data));
},
error:function(){
alert('error');
}
});
}
</script>
<input type="button" onclick="jsonRequest()" value="json请求" />
@RequestMapping("/item") Controller 处理器中接收请求的带pojo形参方法实现如下:
springmvc 通过@RequestBody注解将请求参数为json数据转换为java对象并将数据绑定pojo类相应属性名。
springmvc通过@Response注解将return的java对象转换json数据响应客户端。
@RequestMapping("/queryJson")
public @ResponseBody List<Item> queryToJSON(@RequestBody Item item) throws Exception {
List<Item> items = itemMapper.queryItemsByPo(item);
return items;
}
2) 使用Chrome插件Postman同步请求的调试
key/value请求
json请求
3) springmvc中json交互遇到的问题
1.本次实现使用的spring版本5.04,添加springmvc交互json的依赖依赖包2.9.5测试可以兼容
未导入jackson-core-2.9.5.jar包,报错 No converter found for return value of type: class java.util.ArrayList
再导入jackson-databind-2.9.5.jar未导入jackson-annotations-2.9.5.jar,
报错NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonView
2.Handl处理器中请求方法参数使用@RequestBody 注解,请求访问contentType=application/json
3.使用了注解驱动<mvc:annotation-driven />,则不需配置json转换器,若未使用注解驱动,json转换器需配置指定处理器是配置中,我们使用@RequestMapping注解请求方法,所以指定的处理器适配器为RequestMappingHandlerAdapter。