控制器接收各类请求参数

版权声明:@渔闻520 https://blog.csdn.net/weixin_41060905/article/details/87522954

1.接收普通请求参数

如果传递过来的参数名称和http的保持一致,那么无需任何注解就可以获取参数。

public ModelAndView commonParams(String roleName, String note) {
	    System.out.println("roleName =>" + roleName);
	    System.out.println("note =>" + note);
	    ModelAndView mv = new ModelAndView();
	    mv.setViewName("index");
	    return mv;
	}

通过参数名称和http请求的名称保持一致来获取参数,如果不一致是没有办法获取的,这样允许参数为空

另外,也可以用一个pojo对象来映射http请求的参数,这样既可以通过pojo对象来获得参数了。这样,对于参数比较多的情况就比较方便了。 

public ModelAndView commonParamPojo(RoleParams roleParams) {
	    System.out.println("roleName =>" + roleParams.getRoleName());
	    System.out.println("note =>" + roleParams.getNote());
	    ModelAndView mv = new ModelAndView();
	    mv.setViewName("index");
	    return mv;
	}

当然,前提是,该pojo的属性要和http的请求参数一样!

2.@RequestParam

用该注解可以应对http请求参数名称和映射的不一致的情况。比如在http中为role_name,而接收的为roleName,那么可以这样:

//使用@RequestParam("role_name")指定映射HTTP参数名称
	public ModelAndView requestParam(@RequestParam("role_name") String roleName, String note) {
		System.out.println("roleName =>" + roleName);
	    System.out.println("note =>" + note);
		ModelAndView mv = new ModelAndView();
	    mv.setViewName("index");
	    return mv;
	}

3.使用url传递参数

比如通过getRole/1来获得,则可以这样:

@RequestMapping("/getRole/{id}")
	//注解@PathVariable表示从URL的请求地址中获取参数
	public ModelAndView pathVariable(@PathVariable("id") Long id)  {
		Role role = roleService.getRole(id);
		ModelAndView mv = new ModelAndView();
		//绑定数据模型
		mv.addObject(role);
		//设置为JSON视图
		mv.setView(new MappingJackson2JsonView());
		return mv;
	}

4.传递json参数:

 <script src="https://code.jquery.com/jquery-3.2.0.js"></script>
    <!--
            此处插入JavaScript脚本
    -->
    <script type="text/javascript">

        /** 传递JSON**/

        $(document).ready(function() {
            //JSON参数和类RoleParams一一对应

            var data = {
                //角色查询参数
                roleName : 'role',
                note : 'note',
                //分页参数
                pageParams : {
                    start : 0,
                    limit : 3
                }
            }
            //Jquery的post请求
            $.post({
                url : "http://localhost:8080/Chapter14/role/findRoles.form",
                //此处需要告知传递参数类型为JSON,不能缺少
                contentType : "application/json",
                //将JSON转化为字符串传递
                data : JSON.stringify(data),
                //成功后的方法
                success : function(result) {
                }
            });
        });

    </script>
@RequestMapping("/findRoles")
	public ModelAndView findRoles(@RequestBody RoleParams roleParams) {
		List<Role> roleList = roleService.findRoles(roleParams);
		ModelAndView mv = new ModelAndView();
		//绑定模型
		mv.addObject(roleList);
		//设置为JSON视图
		mv.setView(new MappingJackson2JsonView());
		return mv;
	}

@RequestBody可以将json的形式转换为java的形式。

注意:传递的json数据要和pojo对应的参数一模一样。

5.接收类表数据和表单的序列化:

#1.传递数组给控制器:

$(document).ready(function () {
        //删除角色数组
        var idList = [1, 2, 3];
        //jQuery的post请求
        $.post({
            url: "./params/deleteRoles.do",
            //将JSON转化为字符串传递
            data: JSON.stringify(idList),
            //指定传递数据类型,不可缺少
            contentType: "application/json",
            //成功后的方法
            success: function (result) {
            }
        });
    });
@RequestMapping("/deleteRoles")
	public ModelAndView deleteRoles(@RequestBody List<Long> idList) {
		ModelAndView mv = new ModelAndView();
		//删除角色
		int total = roleService.deleteRoles(idList);
		//绑定视图
		mv.addObject("total", total);
		//JSON视图
	    mv.setView(new MappingJackson2JsonView());
		return mv;
	}

#2.传递对象:(对象要和pojo属性一样!)

 $(document).ready(function () {
        //新增角色数组
        var roleList = [
            {roleName: 'role_name_1', note: 'note_1'},
            {roleName: 'role_name_2', note: 'note_2'},
            {roleName: 'role_name_3', note: 'note_3'}
        ];
        //jQuery的post请求
        $.post({
            url: "./params/addRoles.do",
            //将JSON转化为字符串传递
            data: JSON.stringify(roleList),
            contentType: "application/json",
            //成功后的方法
            success: function (result) {
            }
        });
    });
@RequestMapping("/addRoles")
	public ModelAndView addRoles(@RequestBody List<Role> roleList) {
		ModelAndView mv = new ModelAndView();
		//删除角色
		int total = roleService.insertRoles(roleList);
		//绑定视图
		mv.addObject("total", total);
		//JSON视图
		mv.setView(new MappingJackson2JsonView());
		return mv;
	}
	

#3.提交序列化表单:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>参数</title>
        <!-- 加载Query文件-->
        <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.0.js">
        </script>
        <script type="text/javascript">
        $(document).ready(function () {
            $("#commit").click(function() {
            	var str = $("form").serialize();
            	//提交表单
            	$.post({
                    url: "./params/commonParamPojo2.do",
                    //将form数据序列化,传递给后台,则将数据以roleName=xxx&&note=xxx传递
                    data: $("form").serialize(),
                    //成功后的方法
                    success: function (result) {
                    }
                });
            });
        });
        </script>
    </head>
    <body>
        <form id="form">
            <table>
                <tr>
                    <td>角色名称</td>
                    <td><input id="roleName" name="roleName" value="" /></td>
                </tr>
                <tr>
                    <td>备注</td>
                    <td><input id="note" name="note" /></td>
                </tr>
                <tr>
                    <td></td>
                    <td align="right"><input id="commit" type="button" value="提交" /></td>
                </tr>
            </table>
        </form>
    </body>
</html>
@RequestMapping("/commonParamPojo2")
	public ModelAndView commonParamPojo2(String roleName, String note) {
		System.out.println("roleName =>" + roleName);
		System.out.println("note =>" + note);
		ModelAndView mv = new ModelAndView();
		mv.setViewName("index");
		return mv;
	}
	

由于序列化了传递规则变成了roleName=xxx&&note=xx,所以获得参数就用第一种方法就可以了。

猜你喜欢

转载自blog.csdn.net/weixin_41060905/article/details/87522954