springmvc 如何接收参数

绝地灬酷狼 2022-04-10 14:18 395阅读 0赞
  1. package com.maven.web.controller;
  2. import java.util.Arrays;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.web.bind.annotation.ModelAttribute;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.RequestBody;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestMethod;
  10. import org.springframework.web.bind.annotation.RequestParam;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import com.alibaba.fastjson.JSON;
  13. import com.maven.web.entity.UserInfo;
  14. /**
  15. * 测试springmvc接收参数的几种方式
  16. * @author Administrator
  17. *
  18. */
  19. //统一返回json数据到前端,不必在方法上添加@ResponseBody注解
  20. @RestController
  21. public class SpringController {
  22. private Logger logger = LoggerFactory.getLogger(this.getClass());
  23. /**
  24. * 1,form表单提交
  25. * 可以直接通过参数名获取,
  26. * 不添加注解时
  27. * 注意参数名要和表单name一致,否则获取不到参数值,结果为null
  28. *
  29. * 添加注解@RequestParam时,默认required=true
  30. * 可以设置参数不必传required=false
  31. * 如果没有则会抛异常:Required String parameter 'password' is not present
  32. * 可以给参数设置默认值defaultValue="0000"
  33. * 有默认值的情况下,required属性无效
  34. *
  35. * @param userName
  36. * @param password
  37. */
  38. @RequestMapping(value="/name/form/post/or/get",method={RequestMethod.POST,RequestMethod.GET})
  39. public void formPost(String userName,
  40. @RequestParam(value="password",required=true,defaultValue="0000") String password){
  41. logger.info("form表单提交,通过参数名接收");
  42. logger.info("name:"+userName+",gender:"+password);
  43. }
  44. /**
  45. *,2,form表单提交
  46. * 用一个实体bean来接收表单整体数据,注意bean的属性要和表单name一致
  47. * 只有表单name与bean中属性值一致才会正确赋值,否则bean获取到的值为null
  48. * 可以不添加任何注解
  49. * 也可以添加注解 @ModelAttribute,括号里的别名可以任意取,也可以不填
  50. *
  51. * @param userInfo
  52. */
  53. @RequestMapping(value="/bean/form/post/or/get",method={RequestMethod.POST,RequestMethod.GET})
  54. public void formPost(@ModelAttribute UserInfo userInfo,String testParam){
  55. logger.info("form表单提交,通过实体类接收,映射不到的属性,通过参数名接收");
  56. logger.info("userInfo:"+userInfo);
  57. logger.info("testParam:"+testParam);
  58. }
  59. /**
  60. * 表单提交,相同参数名可以用数组接收
  61. * post,get请求是一样的
  62. * @param userName
  63. */
  64. @RequestMapping(value="/array/form/post/or/get",method={RequestMethod.POST,RequestMethod.GET})
  65. public void formPost(String[] userName,String testParam){
  66. logger.info("form表单提交,用数组接收相同参数名");
  67. logger.info("userName:"+Arrays.toString(userName));
  68. logger.info("testParam:"+testParam);
  69. }
  70. /**
  71. * 链接请求
  72. * 从url后面获取参数
  73. * 必须使用@PathVariable注解
  74. *
  75. * @param userName
  76. * @param password
  77. */
  78. @RequestMapping(value="/link/get/{name}/{pwd}",method=RequestMethod.GET)
  79. public void linkGetPath(@PathVariable("name") String userName,
  80. @PathVariable("pwd") String password){
  81. logger.info("通过链接/link/get/{name}/{pwd}访问传递参数");
  82. logger.info("name:"+userName+",gender:"+password);
  83. }
  84. /**
  85. * 链接请求
  86. * 从url后面获取参数
  87. * 可以使用@RequestParam注解,value必须跟传递的参数名一致
  88. * 这里和表单get请求一样
  89. *
  90. * @param userName
  91. * @param password
  92. */
  93. @RequestMapping(value="/link/get/params",method=RequestMethod.GET)
  94. public void linkGetParams(@RequestParam(value="name") String userName,
  95. @RequestParam(value="pwd") String password){
  96. logger.info("通过链接/link/get/params?name=&pwd=访问传递参数");
  97. logger.info("name:"+userName+",gender:"+password);
  98. }
  99. /**
  100. * 链接请求
  101. * 从url后面获取参数
  102. * 可以直接用参数名获取,不加注解,但是参数名要和传递的参数名一致
  103. * 这里和表单get请求一样
  104. *
  105. * @param userName
  106. * @param password
  107. */
  108. @RequestMapping(value="/link/get",method=RequestMethod.GET)
  109. public void linkGet(String userName,String password){
  110. logger.info("通过链接/link/get?userName=&password=访问传递参数");
  111. logger.info("name:"+userName+",gender:"+password);
  112. }
  113. /**
  114. * 链接请求
  115. * 通过url传递的参数也可以直接用java bean来接收
  116. * 同表单提交一样,这里不需要加注解即可获取到
  117. *
  118. * @param userInfo
  119. */
  120. @RequestMapping(value="/bean/link/get",method=RequestMethod.GET)
  121. public void linkGet(UserInfo userInfo){
  122. logger.info("通过链接/link/get?userName=&password=访问传递参数");
  123. logger.info("userInfo:"+userInfo);
  124. }
  125. /**
  126. * ajax请求,参数为json字符串
  127. * get请求,同上,可以用参数名获取json字符串,然后后台对json字符串做处理
  128. *
  129. * @param userInfo
  130. */
  131. @RequestMapping(value="/ajax/get",method=RequestMethod.GET)
  132. public String ajaxGet(String json){
  133. logger.info("ajax发送get请求,参数为json字符串");
  134. logger.info("json:"+json);
  135. UserInfo userInfo = JSON.parseObject(json, UserInfo.class);
  136. logger.info("userInfo:"+userInfo);
  137. return "success";
  138. }
  139. /**
  140. * ajax请求,参数为json字符串
  141. * post请求,必须添加@RequestBody注解,利用spring框架将json串转成java bean
  142. * java bean 属性名称要和json字符串一致
  143. *
  144. * @param userInfo
  145. */
  146. @RequestMapping(value="/ajax/post",method=RequestMethod.POST)
  147. public String ajaxPost(@RequestBody UserInfo userInfo){
  148. logger.info("ajax发送post请求,参数为json字符串");
  149. logger.info("userInfo:"+userInfo);
  150. return "success";
  151. }
  152. /**
  153. * 测试json字符串是否可以直接用参数名获取
  154. * 结果:不能获取到参数,加上注解@RequestParam也不行
  155. * 可以加上注解@RequestBody,然后用String接收到整个json字符串
  156. *
  157. * @param json
  158. * @return
  159. */
  160. @RequestMapping(value="/ajax/post/params",method=RequestMethod.POST)
  161. public String ajaxPostParams(@RequestBody String json){
  162. logger.info("ajax发送post请求,参数为json字符串");
  163. logger.info("json:"+json);
  164. return "success";
  165. }
  166. /**
  167. * ajax发送数组格式的字符串,
  168. * 实际是数组格式的字符串,需要手动转换成数组对象
  169. * @param params
  170. * @return
  171. */
  172. @RequestMapping(value="/ajax/post/arr",method=RequestMethod.POST)
  173. public String ajaxPostArr(@RequestBody String params){
  174. logger.info("ajax传递数组格式的字符串");
  175. logger.info("params:"+params);
  176. String[] arr = JSON.parseObject(params, String[].class);
  177. logger.info(Arrays.toString(arr));
  178. return "success";
  179. }
  180. /**
  181. * ajax直接传递数组对象,同时还可以传递其他参数,
  182. * 类似表单提交,注意要设置:
  183. * traditional:true
  184. * contentType:默认
  185. *
  186. * @param params
  187. * @return
  188. */
  189. @RequestMapping(value="/ajax/post/arr2",method={RequestMethod.POST,RequestMethod.GET})
  190. public String ajaxPostArr2(String[] params,String name){
  191. logger.info("ajax传递数组对象");
  192. logger.info(Arrays.toString(params));
  193. logger.info("name:"+name);
  194. return "success";
  195. }
  196. }

前端html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Insert title here</title>
  6. </head>
  7. <body>
  8. <span style="font-size: 12px;color:red;">后台直接使用参数名获取表单参数,get,post请求一样</span>
  9. <form id="form1" action="/com.maven.web/name/form/post/or/get" method="get">
  10. <label>用户名</label> <input type="text" id="name" name="userName" /> <br />
  11. <button
  12. onclick="function(){document.getElementById('form1').submit();}">提交</button>
  13. </form>
  14. <br/>
  15. <br/>
  16. <span style="font-size: 12px;color:red;">后台直接使用java bean获取表单参数,get,post请求一样</span>
  17. <form id="form2" action="/com.maven.web/bean/form/post/or/get" method="get">
  18. <label>用户名</label> <input type="text" id="name" name="userName" />
  19. <br />
  20. <label>密码</label> <input type="text" id="password" name="password" />
  21. <br />
  22. <label>其他参数</label> <input type="text" name="testParam" />
  23. <br />
  24. <button
  25. onclick="function(){document.getElementById('form2').submit();}">提交</button>
  26. </form>
  27. <br/>
  28. <br/>
  29. <span style="font-size: 12px;color:red;">后台使用String[]获取表单参数,get,post请求一样</span>
  30. <form id="form3" action="/com.maven.web/array/form/post/or/get" method="get">
  31. <label>用户名</label> <input type="text" name="userName" /> <br />
  32. <label>用户名</label> <input type="text" name="userName" /> <br />
  33. <label>其他参数</label> <input type="text" name="testParam" /><br />
  34. <br />
  35. <button
  36. onclick="function(){document.getElementById('form3').submit();}">提交</button>
  37. </form>
  38. <br/>
  39. <br/>
  40. <span style="font-size: 12px;color:red;">发送链接,从url后面获取参数</span>
  41. <br/>
  42. <a href="http://localhost:8088/com.maven.web/link/get/aa/bb">链接1:/link/get/aa/bb,,通过注解@PathVariable获取</a>
  43. <br/>
  44. <a href="http://localhost:8088/com.maven.web/link/get/params?name=aa&pwd=bb">链接2:/link/get?name=aa&pwd=bb,通过注解@RequestParam获取</a>
  45. <br/>
  46. <a href="http://localhost:8088/com.maven.web/link/get?userName=aa&password=bb">链接3:/link/get?userName=aa&password=bb,直接通过注解参数名获取</a>
  47. <br/>
  48. <a href="http://localhost:8088/com.maven.web/bean/link/get?userName=aa&password=bb">链接4:/bean/link/get?userName=aa&password=bb,通过java bean获取</a>
  49. </body>
  50. </html>
  51. <!DOCTYPE html>
  52. <html>
  53. <head>
  54. <meta charset="UTF-8">
  55. <title>Insert title here</title>
  56. <script type="text/javascript" src="./jquery-2.1.1.js"></script>
  57. <script type="text/javascript">
  58. /**
  59. * ajax get请求,通过url传递参数
  60. * 后台接收到json的字符串,可以自行转换成对象
  61. */
  62. function sendGet(){
  63. var data = {'userName':'aaa','password':'0000'};
  64. var json = JSON.stringify(data);
  65. $.ajax({
  66. method : 'GET',
  67. data:{'json':json},
  68. url : '/com.maven.web/ajax/get',
  69. dataType : 'json',//返回数据格式
  70. success : function(result) {
  71. alert('success');
  72. },
  73. error : function(err) {
  74. alert("error");
  75. }
  76. });
  77. };
  78. /**
  79. * post请求,传递json格式数据,后台可以直接用实体bean接收
  80. * contentType : 'application/json'
  81. */
  82. function sendPost(){
  83. var data = {'userName':'aaa','password':'0000'};
  84. var json = JSON.stringify(data);
  85. $.ajax({
  86. method : 'POST',
  87. url : '/com.maven.web/ajax/post',
  88. data : json,
  89. dataType : 'json',//返回数据格式
  90. contentType : 'application/json',//必须为false
  91. success : function(result) {
  92. alert('success');
  93. },
  94. error : function(err) {
  95. alert("error");
  96. }
  97. });
  98. };
  99. /**
  100. * post 传递json格式数据,后台如果不用实体bean接收,可以直接用String接收
  101. * 获取到json串然后自行转换成对象
  102. */
  103. function sendPostParams(){
  104. var data = {'userName':'aaa','password':'0000'};
  105. var json = JSON.stringify(data);
  106. $.ajax({
  107. method : 'POST',
  108. url : '/com.maven.web/ajax/post/params',
  109. data : json,
  110. dataType : 'json',//返回数据格式
  111. contentType : 'application/json',
  112. success : function(result) {
  113. alert('success');
  114. },
  115. error : function(err) {
  116. alert("error");
  117. }
  118. });
  119. };
  120. /**
  121. * 通过json字符串的格式传递数组,后台需要手动获取参数转换成数组
  122. * 如果只有一个参数,后台可以直接获取,但是如果有多个,后台必须封装成java bean来获取
  123. * 属性对应json传递的参数名
  124. */
  125. function sendPostArr(){
  126. var _list = [];
  127. for (var i = 0; i < 5; i++) {
  128. _list[i] = 'a'+i;
  129. }
  130. var data = {'params':_list};
  131. var json = JSON.stringify(_list);
  132. $.ajax({
  133. method : 'POST',
  134. url : '/com.maven.web/ajax/post/arr',
  135. data : json,
  136. dataType : 'json',//返回数据格式
  137. contentType : 'application/json',
  138. success : function(result) {
  139. alert('success');
  140. },
  141. error : function(err) {
  142. alert("error");
  143. }
  144. });
  145. };
  146. /**
  147. * 直接传递数组对象,后台可以用数组直接接收
  148. * 这是模拟表单提交数据,可以直接传递参数
  149. * 注意,传递数组的话,必须设置traditional: true
  150. * 这里设置get,post请求都一样
  151. */
  152. function sendPostArr2(){
  153. var _list = [];
  154. for (var i = 0; i < 5; i++) {
  155. _list[i] = 'a'+i;
  156. }
  157. $.ajax({
  158. method : 'GET',
  159. url : '/com.maven.web/ajax/post/arr2',
  160. data : {'params':_list,'name':'aaa'},
  161. traditional: true,//当设置成true的时候就会用传统方式序列化参数
  162. dataType : 'json',
  163. success : function(result) {
  164. alert('success');
  165. },
  166. error : function(err) {
  167. alert("error");
  168. }
  169. });
  170. };
  171. </script>
  172. </head>
  173. <body>
  174. <span style="font-size: 12px;color:red;">ajax请求发送json字符串,后台不能直接用参数名获取</span>
  175. <br/>
  176. <a href="#" onclick="sendGet()">ajax get请求,后台可以直接用参数名接收</a>
  177. <br/>
  178. <br/>
  179. <a href="#" onclick="sendPost()">ajax post请求,后台用注解@RequestBody+java bean接收参数</a>
  180. <br/>
  181. <br/>
  182. <a href="#" onclick="sendPostParams()">ajax post请求,后台用注解@RequestBody+String接收整个json串</a>
  183. <br/>
  184. <br/>
  185. <a href="#" onclick="sendPostArr()">ajax post请求通过json字符串的格式传递数组,后台需要手动获取参数转换成数组</a>
  186. <br/>
  187. <br/>
  188. <a href="#" onclick="sendPostArr2()">ajax直接传递数组对象,后台可以用数组直接接收,post,get请求都一样</a>
  189. </body>
  190. </html>

发表评论

表情:
评论列表 (有 0 条评论,395人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringMVC-参数接收

    > 逐个参数接收  只要保证请求参数名与该请求处理方法的参数名相同即可  SpringMVC 绑定请求参数是自动实现的,但是要想使用,必须遵循使用要求: 1、如果是基本类