admin管理员组文章数量:1794759
spring mvc自动封装前端发送的json数据绑定为指定对象
1.问题场景
在前端用jQuery向后台发送json数据,然后在后台收到封装好的对象
2.代码示例前端
$.ajax({ url:"XXXX", data:JSON.stringify(user),//user是一个json数据 type:"XXX", contentType: "application/json;charse=UTF-8", success:function (data) { }, error:function (err) { } });注意
1.json数据必须用JSON.stringify()方法转换成字符串
2.contentType不能省略
后台
@RequestMapping(value = "xxxxx",method = RequestMethod.XXX) @ResponseBody public Msg methodName(@RequestBody User user) { logger.info("user:"+user); return Msg.success(); }注意
@RequestBody不可以省略
3.spring mvc封装json数据的原理分析首先通过@RequestBody表明这个方法的参数应该被request的body绑定,即我们从前端传过去的json数据。而这个转换器就是:org.springframework.http.converter.HttpMessageConverter的一个实现类。在这里用的是阿里的fastjson来取代spring默认的Jackson进行数据绑定。(用fastjson最直观的优势就是如果属性为空就不会将其转化为json,数据会简洁很多)
第一步:在mvc配置文件中配置fastjson
<mvc:annotation-driven> <mvc:message-converters> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"/> </mvc:message-converters> </mvc:annotation-driven>第二步:断点追踪请求的处理过程
请求在com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4#readInternal方法中进行处理。读取了请求的body内容,然后通过JSON.parseObject返回目标对象
protected Object readInternal(Class<? extends Object> clazz, // HttpInputMessage inputMessage // ) throws IOException, HttpMessageNotReadableException { InputStream in = inputMessage.getBody(); return JSON.parseObject(in, fastJsonConfig.getCharset(), clazz, fastJsonConfig.getFeatures()); }版权声明:本文标题:spring mvc自动封装前端发送的json数据绑定为指定对象 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686612387a86075.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论