IT序号网

@RequestBody-------springMVC

shasha 2021年06月11日 编程语言 348 0

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的差别。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!