@RequestBody-------springMVC
2016-01-14 14:18
357 查看
link:给推荐几个对程序员来说神器般存在的软件
1.作用:
在SpringMVC后台控制层获取参数
A.前台发送的ajax请求到服务器
所传送的数据格式,如下,是一个js的对象,然后给转换成json格式,给后台。
B.后台控制器获得并处理
后台得到json数据然后自动转换成一个相对应的对象。无需手动进行json与实体的转换
2.心得:
前台传给后台的参数,名字可以不一致-----就是ajax里面传的数据里面的stream可以不一致即(前台ajax请求里面的stream,后台stream)
(具体可见下图)
为什么可以不一致:
只要能映射上去(也就是字段名和json的key相对应,value可以匹配上数据类型),那么就可以直接转换。也就是json中的key在实体中都能找到对应的field,那么就是“能映射上去”,也就是说:前台传入的json中的key在实体中必须要存在,不然就会报错。所谓实体就是要转换的对象类型。一般以一个.java文件控制,就是个javabean(public class Stream implements Serializable,Cloneable {})文件。
可变的-------后面的 Stream stream 的这个变量名是可自定义。
是否必须----可以通过[b]@RequestBody(required = false)或者true来要求@RequestBody配置的前端参数是否一定要传[/b]
然后:就是前台的对象,到后台会自动转换为一个Stream类型的对象,是框架里面配置过的(具体怎么配置就不啰嗦了)。后台代码里肯定有个Stream的model的java类,里面有各种属性。
从图上可以看到是各种信息。前台所传参数名字变了。还是返回200状态码。所说这个不影响。
上图1中:
Content-Type : 图中有2个,
红框的是接收的值以json格式传值。在ajax里面设置 这个属性决定返回数据类型:dataType: "json"
下面的是设置传送给后台数据时的数据类型。
request payload :就是所传的数据。
上图2中:就是修改所传送的数据名。还是可以正常访问。
下次再说RequestParam和@RequestBody的差别。
1.作用:
在SpringMVC后台控制层获取参数
A.前台发送的ajax请求到服务器
所传送的数据格式,如下,是一个js的对象,然后给转换成json格式,给后台。
$.ajax({ url: SUBSYSTEM_APP_NAME + "streams/saveStreamrules", type: "post", contentType: "application/json; charset=utf-8", data: JSON.stringify(stream), dataType: "json", success: function (data) { xxxx } });
var stream = { id: $("#streamId").val(), title: "" == $("#stream_title").val().trim() ? null : $("#stream_title").val().trim(), disabled: !$("#stream_disabled").prop("checked"), topoIds: $("#topoIds").val(), streamrules: streamrule_datas, };
B.后台控制器获得并处理
@RequestMapping(value = "/saveStreamrules") public @ResponseBody JsonResult saveStreamRules(@RequestBody Stream stream) { LOG.debug("---------------streamsController: saveStreamRule---------------"); LOG.debug("---------------stream:\t" + stream); }
后台得到json数据然后自动转换成一个相对应的对象。无需手动进行json与实体的转换
2.心得:
前台传给后台的参数,名字可以不一致-----就是ajax里面传的数据里面的stream可以不一致即(前台ajax请求里面的stream,后台stream)
(具体可见下图)
为什么可以不一致:
只要能映射上去(也就是字段名和json的key相对应,value可以匹配上数据类型),那么就可以直接转换。也就是json中的key在实体中都能找到对应的field,那么就是“能映射上去”,也就是说:前台传入的json中的key在实体中必须要存在,不然就会报错。所谓实体就是要转换的对象类型。一般以一个.java文件控制,就是个javabean(public class Stream implements Serializable,Cloneable {})文件。
可变的-------后面的 Stream stream 的这个变量名是可自定义。
是否必须----可以通过[b]@RequestBody(required = false)或者true来要求@RequestBody配置的前端参数是否一定要传[/b]
然后:就是前台的对象,到后台会自动转换为一个Stream类型的对象,是框架里面配置过的(具体怎么配置就不啰嗦了)。后台代码里肯定有个Stream的model的java类,里面有各种属性。
从图上可以看到是各种信息。前台所传参数名字变了。还是返回200状态码。所说这个不影响。
上图1中:
Content-Type : 图中有2个,
红框的是接收的值以json格式传值。在ajax里面设置 这个属性决定返回数据类型:dataType: "json"
下面的是设置传送给后台数据时的数据类型。
request payload :就是所传的数据。
上图2中:就是修改所传送的数据名。还是可以正常访问。
下次再说RequestParam和@RequestBody的差别。
相关文章推荐
- Spring事务配置的五种方式
- java 反射机制
- 如何创建一个基于WEB的工作流编辑器
- 统计项目的java代码总行数
- Java类加载器深入理解
- Mybatis添加到Spring
- CXF整合Spring发布WebService实例
- CXF整合Spring发布WebService实例
- Java常见异常总结
- STRUTS2获得session和request
- jdk的安装(转载)
- java 读取文件内容
- Git@OSC通过Eclipse生成SSH keys RSA公钥私钥
- struts2验证-validation
- eclipse加载大项目卡死问题
- java 将代理对象保存到本地文件
- 关于Java的异常
- [Spring MVC - 2A] - java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
- Java回调的简单理解
- [问答系列一]Java基础知识