您的位置:首页 > 编程语言 > Java开发

@RequestBody-------springMVC

2016-01-14 14:18 357 查看
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 的这个变量名是可自定义。

是否必须----可以通过[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的差别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: