• Spring MVC(五)--控制器通过注解@RequestParam接受参数


    上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上。下面通过实例说明,场景如下:

    在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲染到新的视图。所以首先来创建输入参数页面,然后创建控制器,再创建对应的响应视图。

    1、创建输入参数页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <%
        String root = request.getContextPath();
        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                + root + "/";
    %>
    <script type="text/javascript"
        src="<%=basePath%>jslib/jquery-1.8.3.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>jslib/jquery.form.js"></script>
    <script type="text/javascript" src="<%=basePath%>js/param.js"></script>
    <link href="<%=basePath%>css/param.css" type="text/css" rel="stylesheet">
    <title>Insert title here</title>
    </head>
    <body>
    
        <!-- 简单参数传递 -->
        <p style="text-align: center;color: red;font-size: x-large;">Spring MVC控制器接受参数方式测试</p>
        <div class="param">
            <!--使用注解获取参数 -->
            <div class="public annotaion">
                <p style="text-align: center;">注解法获取</p>
                <form id="annoForm" action="<%=basePath%>param/annoParam"
                    method="post">
                    <table>
                        <tr>
                            <td>id:</td>
                            <td><input type="text" name="paramId" value=""></td>
                        </tr>
                        <tr>
                            <td>名称:</td>
                            <td><input type="text" name="paramName" value=""></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td style="text-align: right;"><input type="submit"
                                value="提交" id="setAnnoParam"></td>
                        </tr>
                    </table>
                </form>
            </div>
    </body>
    </html>

    页面如下:

    2、创建控制器

    @Controller
    @RequestMapping("/param")
    public class ParamController {
    
        /**
         * 通过注解的方式获取参数
         * 
         * @param paramId
         * @param paramName
         * @return
         */
        @RequestMapping(value = "annoParam", method = RequestMethod.POST)
        public ModelAndView getParamByAnno(@RequestParam(value = "paramId", required = false) String id,
                @RequestParam("paramName") String name) {
            ModelAndView mv = new ModelAndView();
            System.out.println(id);
            System.out.println(name);
            mv.addObject("paramId", id);
            mv.addObject("paramName", name);
            mv.setViewName("annoParam");
            return mv;
        }
    }

    在控制器中,我的参数是id和name,但是前端传过来的是paramId和paramName,这个时候如果直接接受会报错,所以要通过注解进行转化,注解的值就是前端传过来的参数名,可以看到前端页面中的参数名就是paramId和paramName。

    注意⚠️:如果参数被注解@RequestParam修饰,默认情况下该参数不能为空,如果为空系统会抛异常,如果允许它为空,还要给注解增加一个required属性,属性值设置为false即可。

    上面的控制器获取到参数之后将数据渲染到了视图annoParam中,所以下一步就是创建这个响应视图。

    3、创建响应页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Annotatioin Param</title>
    </head>
    <body>
    
        <h2>
            获取到的参数id是:<label>${paramId }</label> <br /> 获取到的参数名称是:<label>${paramName }</label>
        </h2>
    
    </body>
    </html>

    在该页面获取了控制器渲染的数据。至此,代码完成,下面开始测试。

    4、测试

    首先在页面输入如下参数:

    点击提交之后结果如下:

    可以看到渲染成功,说明控制器接受参数成功。

    5、总结

    注解方式需要注意两点:

    1、注解的value属性值为前端传递过来的参数名

    2、默认不能为空,如果希望允许为空,必须增加属性required,并设置其值为false

  • 相关阅读:
    机器学习之数据预处理
    使用Python一步一步地来进行数据分析总结
    深入对比数据科学工具箱:Python和R之争
    机器学习算法中的过拟合与欠拟合
    监督学习与无监督学习
    Python数据分析之pandas学习
    Python数据分析之numpy学习
    Dart语言学习(二) Dart的常量和变量
    Dart语言学习(一)为什么学习Dart?
    iOS项目中集成Flutter的最新适配升级
  • 原文地址:https://www.cnblogs.com/hellowhy/p/9741344.html
Copyright © 2020-2023  润新知