*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请求

springmvc fastjson替换 jackjson springmvc json转对象_json

json请求

springmvc fastjson替换 jackjson springmvc json转对象_json请求_02

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。