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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM