Spring Boot学习(四)Controller接收请求参数
一、通过实体Bean接收请求参数
通过实体Bean来接收请求参数,适用于get和post方式,Bean的属性名称必须与请求参数名称相同。
项目结构如下:

1.Bean代码如下:
1package com.example.beans; 2 3public class Student { 4 private int id; 5 private String name; 6 private String pwd; 7//省略get和set 8}
2.表单页面如下 mytest.html
1<!DOCTYPE html> 2<html lang="en" xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Controller接收请求参数</title> 6</head> 7<body> 8<form action="/test/test1" method="post"> 9 姓名:<input type="text" name="name"> 10 <br/><br/> 11 密码:<input type="password" name="passwd"> 12 <br/><br/> 13 <input type="submit" value="确定"/> 14</form> 15</body> 16</html>
3.控制器代码如下:
1@Controller 2public class MyTest { 3 4 @RequestMapping(value = "/test/login") 5 public String test1(){ 6 return "/test/mytest"; 7 } 8 9 @RequestMapping(value = "/test/test1",method=RequestMethod.POST) 10 public String login(Student stu, Model model){ 11 model.addAttribute("stu",stu); 12 return "/test/result"; 13 } 14}
4.显示结果页面result.html
1<!DOCTYPE html> 2<html lang="en" xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>所有学生信息</title> 6</head> 7<body> 8<h4 th:text="${stu.getName()}"></h4> 9</body> 10</html>
二、通过方法的参数接收
通过处理方法的形参接收请求参数,也就是直接把表单参数写在控制器类相应方法的形参中,即形参名称与请求参数名称完全相同。该接收参数方式适用于get和post提交请求方式。
1@RequestMapping(value="/test/test2",method = RequestMethod.POST) 2 public String login(String name, String password, Model model){ 3 model.addAttribute("name",name); 4 return "/test/result"; 5 }
三、通过HttpServletRequest接收请求参数
通过HttpServletRequest接收请求参数,适用于get和post提交请求方式
1@RequestMapping(value="/test/test3",method=RequestMethod.POST) 2 public String login(HttpServletRequest req,Model model){ 3 String name=req.getParameter("name"); 4 model.addAttribute("name",name); 5 return "/test/result"; 6 }
四、通过@PathVariable接收URL中的请求参数
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。
1http://localhost:8080/test/test4/张三丰 2 3@RequestMapping(value = "/test/test4/{name}",method = RequestMethod.GET) 4 @ResponseBody 5 public String test4(@PathVariable String name){ 6 return name; 7 }
五、通过@RequestParam接收请求参数
1@RequestMapping("/test/test5") 2 @ResponseBody 3 public String test5(@RequestParam String name,@RequestParam String passwd){ 4 return name; 5 }
通过@RequestParam接收请求参数与通过处理方法的形参接收请求参数的区别是:当请求参数名与接收参数名不一致时,通过处理方法的形参接收请求参数不会报404错误,而通过@RequestParam接收请求参数会报404错误。
六、通过@ModelAttribute接收请求参数
1@RequestMapping("/test/test6") 2 public String test6(@ModelAttribute("stu") Student stu){ 3 return "/test/result"; 4 }
@ModelAttribute注解放在处理方法的形参上时,用于将多个请求参数封装到一个实体对象,从而简化数据绑定流程,而且自动暴露为模型数据,于视图页面展示时使用。而“通过Bean接收请求参数”只是将多个请求参数封装到一个实体对象,并不能暴露为模型数据(需要使用model.addAttribute语句才能暴露为模型数据)。
视图层代码如下:
<h4 th:text="${stu.getName()}"></h4>