URL傳遞參數時,格式是類似這樣的,/param/urlParam/4/test,其中4和test都是參數,這就是所謂的Restful風格,Spring MVC中通過注解@RequestMapping和注解@PathVariable來獲取這種方式的參數傳遞。通過代碼說明,首先我在頁面輸入參數,通過js將URL拼接成URL的樣式然后在控制器中獲取,獲取成功之后將數據渲染成json數據返回,並在當前頁面顯示。
注意⚠️:因為采用了ajax的方式,所以不會渲染新的視圖,只能局部刷新,在當前頁面獲取。下面是整個流程:
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"> <!--使用URL傳遞參數 --> <div class="public url"> <p style="text-align: center;">URL方式傳遞參數</p> <form id="urlForm"> <table id="urlTable"> <tr> <td>id:</td> <td><input type="text" name="id" value=""></td> </tr> <tr> <td>名稱:</td> <td><input type="text" name="name" value=""></td> </tr> <tr> <td></td> <td style="text-align: right;"><input type="button" value="提交" id="setUrlParam"></td> </tr> </table> </form> </div> </body> </html>
頁面如下:
從上面的代碼中可以看出,form表單沒有請求的action,因為我使用的是ajax請求的方式,並且在該文件中已經引入jquery的包,所以下一步是使用ajax提交請求,拼接URL。
2、創建ajax請求
$(function() { /* url方式傳遞參數 */ $("#setUrlParam").click( function() { $.ajax({ url : "./urlParam/" + $("input[name=id]").val() + "/" + $("input[name=name]").val(), type : "POST", success : function(data) { var html = "<tr><td>ID:</td><td>" + data.param.paramId + "</td></tr></br><tr><td>NAME:</td><td>" + data.param.paramName + "</td></tr>"; $("#urlTable").append(html); } }); }); });
上面紅色加粗的部分是拼接URL,可以看到請求成功后將數據渲染到當前頁面了。接下來創建控制器
3、創建控制器
@Controller @RequestMapping("/param") public class ParamController { /** * 通過URL的方式傳遞參數 * * @param id * @param name * @return */ @RequestMapping(value = "urlParam/{id}/{name}", method = RequestMethod.POST) public ModelAndView getParamByurl(@PathVariable("id") Integer id, @PathVariable("name") String name) { ModelAndView mv = new ModelAndView(); System.out.println(id); System.out.println(name); Param param = new Param(); param.setParamId(id); param.setParamName(name); mv.addObject(param); mv.setView(new MappingJackson2JsonView()); return mv; } }
注意上面代碼中加粗的部分:
1⃣️注解@RequestMapping中的value值就是請求這個方法的URL,URL中包含兩個參數id和name
2⃣️注解@PathVariable用來獲取傳過來的參數值,名稱就是前端傳遞的參數名;
控制器獲取到數據后渲染成json視圖,所以在剛才請求的頁面可以獲取到返回的數據。
注意⚠️:使用MappingJackson2JsonView映射json視圖的時候,需要導入相關的包,而且是2.0以上的,我在maven中添加的依賴如下:
<!--jackson json視圖相關 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.5</version> </dependency>
因為在第二步中已經將數據渲染到請求頁面,所以全部代碼已經完成,下面進行測試。
4、測試
在頁面輸入如下參數:
點擊提交按鈕
在控制台可以看到請求的URL如下:
請求成功的結果如下:
藍色框內是渲染的參數,說明控制器獲取成功!
5、總結
- 控制器接受URL參數時,需要通過注解@RequestMapping和注解@PathVariable配合使用,前者映射URL,后者獲取參數;
- URL中的參數需要用{}擴起來,表示處理器需要接受一個URL組成的參數,且參數名稱為{}中的值,name@PathVariable將會獲取在@RequestMapping中定義的參數值,這樣就可以在方法內使用這個值了。