转载地址:https://blog.csdn.net/beidaol/article/details/104172885
首先,在项目的前后交互中json数据格式比较常用,普遍认为json格式比较简单,易于解析
如果我们在前端发送一个ajax请求的话
可以看到是用json字符串格式向后台传请求参数,那么后台需要采用@RequestBody来处理请求的json格式数据,将json数据转换为java对象,否则springmvc就不能解析导致传空参的结果
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。而 @ResponseBody就可以理解成将java的对象转换成json字符串的格式给前端解析(json数据格式解析比较简单)
如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据。如果不加,就走视图解析器,返回页面
现在在开发项目有喜欢用key/value的格式传给后台。此方法比较常用。在ajax的data中写 ‘name=我&age=12’这个就不用就可以不用加@RequestBody
这里看下项目中请求的格式可以采用qs.stringify()方法将对象或者数组转换为一个key/value的格式。这个时候后台接受就可以不用加@RequestBody。在这里需要注意的是,JSON中同样存在stringify()方法,但是两者之间的区别是很明显的,json的stringify()是返回json字符串‘{"uid":"cs11","pwd":"000000als","username":"cs11","password":"000000als"}’但是qs.stringify()是返回key/vlue的拼接: uid=cs11&pwd=000000als&username=cs11&password=000000als
总结:
客户端请求的数据是json字符串,springmvc不能直接解析,加@requestBody解析成对象,客户端请求的是key/value(‘name=我&age=12’)的拼接不需要加@requestBody,@responseBody返回json字符串,如果是ajax请求,我们想到得到json对象的话(为了方便根据key取value)
在ajax中增加如下:
dataType: "json"
参考博客:
https://blog.csdn.net/suwu150/article/details/78333452
https://www.cnblogs.com/cnblog-long/p/6547380.html
1.为什么要进行json数据交互
json数据格式在接口调用中、html页面中较常用,json格式比较简单,解析还比较方便。
比如:webservice接口,传输json数据.
2.springmvc进行json交互
- 请求json、输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便
- 请求key/value、输出json。此方法比较常用。
3.环境准备
3.1加载json转的jar包
springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转),如下:
jackson-core-asl-1.9.11.jar
jackson-mapper-asl-1.9.11.jar
@RequestBody作用:
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。
本例子应用:
@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象
@ResponseBody作用:
该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端
本例子应用:
@ResponseBody注解实现将controller方法返回对象转换为json响应给客户端
3.2配置json转换器
在注解适配器中加入messageConverters
注意:如果使用<mvc:annotation-driven /> 则不用定义上边的内容。
4.json交互测试
4.1输入json串,输出是json串
4.1.1jsp页面
使用jquery的ajax提交json串,对输出的json结果进行解析。
使用jduery别忘记引入jquery-1.4.4.min.js
4.1.2controller
4.1.3测试结果
4.2输入key/value,输出是json串
4.2.1jsp页面
使用jquery的ajax提交key/value串,对输出的json结果进行解析。
4.2.2controller
4.2.3测试
后台控制台输出了"前台传过来的商品名:手机",且查看http数据可以看到json数据的反馈。