link:给推荐几个对程序员来说神器般存在的软件
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 的这个变量名是可自定义。
是否必须----可以通过@RequestBody(required = false)或者true来要求@RequestBody配置的前端参数是否一定要传
然后:就是前台的对象,到后台会自动转换为一个Stream类型的对象,是框架里面配置过的(具体怎么配置就不啰嗦了)。后台代码里肯定有个Stream的model的java类,里面有各种属性。
从图上可以看到是各种信息。前台所传参数名字变了。还是返回200状态码。所说这个不影响。
上图1中:
Content-Type : 图中有2个,
红框的是接收的值以json格式传值。在ajax里面设置 这个属性决定返回数据类型:dataType: "json"
下面的是设置传送给后台数据时的数据类型。
request payload :就是所传的数据。
上图2中:就是修改所传送的数据名。还是可以正常访问。
下次再说RequestParam和@RequestBody的差别。