数据交换问题小结

本文总结了SpringMVC框架在与前端数据交换中的关键点,包括ajax请求的Content-Type字段,如application/x-www-form-urlencoded和application/json的使用。对于json格式的数据,需要使用JSON.stringify序列化,并在后端使用@RequestBody注解进行反序列化。在Spring MVC中,控制器返回的POJO对象会自动转换为json字符串,前端接收时直接是json对象。
摘要由CSDN通过智能技术生成

最近学习SpringMVC框架,这个框架在与前端进行数据交换的过程中与asp.net有些不同。由于之前的项目我一直从事前端开发工作,只在数据打包转发后,对其进行接收,处理,而没有关注过数据的序列化,反序列化,以及参数格式问题等,今天在这篇博客进行相关整理:

Question1:

发送ajax异步请求时的两种数据格式:

HTTP请求中的Content-Type字段是指http/https发送信息至服务器的内容编码类型,表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据,今天要提到ajax请求经常用到的两种资源类型:application/x-www-form-urlencodedapplication/json

(1)application/x-www-form-urlencoded:ajax请求时不设置任何contentType,默认将使用这种格式。这种格式的特点就是,name/value成为一组,每组之间用&联接,而name与value则使用=连接,user=username&pass=password的形式。使用这种contentType时,对于简单的json对象类型,如:{“a”:1,"b":2,"c":3} 这种,将也会被转成user=username&pass=password 这种形式发送到服务端。这种类型的参数提交方式有get和post两种,这两种方式的区别是前者把编码后的user=username&pass=password这种形式的参数放在url上进行提交,后者是放在请求报文的请求体部分进行发送,只是发送数据时数据放的位置不一样。对于这种格式的参数,原生的Servlet可以使用request.getParamter("参数名")获取参数,spring mvc框架可自动根据参数名进行匹配,如果表单元素的name属性和接收参数的名称不一致,还可通过@RequestParam的方式进行匹配。

(2)application/json:对于复杂的json 结构数据,这种方式处理起来就相对要困难,服务端解析时也难以解析,所以,就有了application/json 这种类型,这是一种数据格式的申明,表示json格式的字符串。如果ajax中设置为该类型,则发送的json对象必须要使用JSON.stringify进行序列化成字符串才能和设定的这个类型匹配;且ajax必须定义contentType:application/json,否则默认为application/x-www-form-urlencoded;同时,对应的后端如果使用了Spring,接收时需要使用@RequestBody来注解,这样才能将发送过来的json字符串解析绑定到对应的 pojo 属性上。始终记住,json字符串,"application/json”,@RequestBody 这三者之间是一一对应的,要有都有,要没有都没有。

Question2:

项目中,由于小组大佬是全c#系开发,所以老板每次都把技术定格在asp.net,由此我只能苦逼的敲敲前端。言归正传,每次我用ajax做异步处理时,后端响应后传回json数据,我接收到的数据,总是需要JSON.stringfy(),转化为json对象;最近磕springmvc过程中发现,controller中的方法在响应结束后返回pojo对象,@ResponseBody将对象序列化为json字符串返回到前台,spring mvc在json字符串返回到前台时,帮我们做好了隐式的转化,我接收到的直接是json对象,无须JSON.stringfy()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值