springMVC 学习 五 参数传递(包括restful风格)
(一)SpringMVC Controller接受参数的方式
(1) 前端传递的参数,在springMVC的controller中使用基本数据类型或者String 类型进行接受
在前端有一个form表单,需要传递姓名和年龄,在controller可以采用基本数据类型或者String进行接受,
<form action="demo" method="post"> 名字:<input type="text" name="name"/><br/> 年龄:<input type="text" name="age"/><br/> <input type="submit" value="提交"/><br/> </form>
此时值需要接受参数的名称和传递的参数名称一致就行
fun01(String name,int age)
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(String name,int age) {//字符串的返回值代表代表要跳转的页面 System.out.println(name); System.out.println(age); System.out.println("指定了demo"); //返回值最好写全路径,全路径就是以"/"开头的路径,否则就是相对路径, //相对路径就是以相对当前方法的映射路径,例如如果返回值是"main.jsp",是相对路径,最后的绝对路径是 //"demo/main.jsp" return "/main.jsp"; } }
(2) 前端传递的参数,在springMVC的controller中使用 类类型进行接受(走get/set方法)
此时需要 类类型的属性名称与前端传递参数的参数名称一致
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(People peo) {//字符串的返回值代表代表要跳转的页面 System.out.println(peo.getName()); System.out.println(peo.getAge()); System.out.println("指定了demo"); //返回值最好写全路径,全路径就是以"/"开头的路径,否则就是相对路径, //相对路径就是以相对当前方法的映射路径,例如如果返回值是"main.jsp",是相对路径,最后的绝对路径是 //"demo/main.jsp" return "/main.jsp"; } }
(3) 前端传递的参数,在springMVC的controller中使用HttpServletRequest进行接受
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(HttpServletRequest req) {//字符串的返回值代表代表要跳转的页面 System.out.println("指定了demo"); //返回值最好写全路径,全路径就是以"/"开头的路径,否则就是相对路径, //相对路径就是以相对当前方法的映射路径,例如如果返回值是"main.jsp",是相对路径,最后的绝对路径是 //"demo/main.jsp" System.out.println(req.getParameter("name")); System.out.println(req.getParameter("age")); return "/main.jsp"; } }
(4) 前端传递的参数,在springMVC的controller中 同时使用上述三中方法进行接受
@Controller public class DemoController { @RequestMapping("/demo") public String fun01(People peo, String name,int age,HttpServletRequest req) {//字符串的返回值代表代表要跳转的页面 System.out.println(name); System.out.println(age); System.out.println(peo.getName()); System.out.println(peo.getAge()); System.out.println("指定了demo"); //返回值最好写全路径,全路径就是以"/"开头的路径,否则就是相对路径, //相对路径就是以相对当前方法的映射路径,例如如果返回值是"main.jsp",是相对路径,最后的绝对路径是 //"demo/main.jsp" System.out.println(req.getParameter("name")); System.out.println(req.getParameter("age")); return "/main.jsp"; } }
(二)@RequestParam()注解
(1) 如果请求参数名和方法参数名不对,使用value属性
@RequestMapping("demo") public String demo(@RequestParam(value="name1") String name,@RequestParam(value="age1")int age) { System.out.println("执行 demo"+" "+name+""+age); return "main.jsp"; }
(2)如果接受参数是基本类型,且接受参数类型与null无法进行兼容,此时可以采用包装类型或者采用默认值,使用defaultValue属性
@RequestMapping("page") public String page(@RequestParam(defaultValue="2")int pageSize,@RequestParam(defaultValue="1") int pageNumber){ System.out.println(pageSize+" "+pageNumber); return "main.jsp"; }
(3)如果强制要求必须有某个参数,使用required属性
@RequestMapping("demo2") public String demo2(@RequestParam(required=true) String name){ System.out.println("name 是 SQL 的查询条件,必须要传递 name 参数"+name); return "main.jsp"; }
(4)传递List类型的参数 使用value属性,因为在前端传递过来的list都会放入一个参数名称中,只要把这个参数名称和一个List类型变量进行绑定
@RequestMapping("demo5") public String demo5(String name,int age,@RequestParam("hover")List<String> abc){ System.out.println(name+" "+age+" "+abc); return "main.jsp"; }
(5)请求参数中对象.属性格式
jsp中的代码如下
<input type="text" name="peo.name"/> <input type="text" name="peo.age"/>
此时需要创建一个类,类中要有一个属性是peo,且这个属性的类型必须是包含name,age这个两个属性的类,两个类都要有get/set方法,
Demo类型
public class Demo { private People peo; public People getPeo() { return peo; } public void setPeo(People peo) { this.peo = peo; } @Override public String toString() { return "Demo [peo=" + peo + "]"; } }
People 类型
public class People { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "People [name=" + name + ", age=" + age + "]"; } }
controller 的接受参数
@RequestMapping("demo6") public String demo6(Demo demo){ System.out.println(demo); return "main.jsp"; }
(三) restful风格的参数
首先请求参数的格式一定的要求,老的方式是<a href="demo8?name=张三&age=23">跳转</a>,
而restful格式是:<a href="demo8/123/abc">跳转</a>
在控制器中:
在@RequestMapping 中一定要和请求格式对应
{名称} 中名称自定义名称
@PathVariable 获取@RequestMapping 中内容,默认按照方法参数名称去寻找.
@RequestMapping("demo8/{id1}/{name}")
public String demo8(@PathVariable String name,@PathVariable("id1") int age){
System.out.println(name +" "+age);
return "/main.jsp";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!