前言
使用@Controller、@RequestMapping 注解提供Web服务,介绍如何获取请求参数。
1、@Controller
@Controller 注解可以将一个普通的 Java 类标识成控制器(Controller)类
2、@RequestMapping
2.1、类作用域
@RequestMapping("/springMvc") public class HelloWorldController { @RequestMapping("/") public String sayHelloWorld(){ return "index"; } }
2.2、value是默认属性,可以对应多个地址
@RequestMapping(value = {"/register","/login"}) public String register(){ return "register"; }
2.3、method属性
仅支持GET请求
@RequestMapping(value = "/",method = RequestMethod.GET)
支持GET、POST请求
@RequestMapping(value = "/",method = {RequestMethod.GET,RequestMethod.POST})
2.4、params属性
params 属性用于指定请求中的参数,只有当请求中携带了符合条件的参数时,控制器方法才会对该请求进行处理
序号 | 表达式 | 含义 |
① | “param” | 请求中必须携带名为 param 的参数 |
② | “!param” | 与表达式 ① 的含义完全相反,请求中不能携带名为 param 的参数 |
③ | “param=value” | 请求中必须携带名为 param 的参数,且参数的取值必须为:value |
④ | “param!=value” | 与表达式 ③ 的含义完全相反,请求中不能携带参数:param = value。 |
2.5、headers属性
headers 属性用于设置请求中请求头信息,只有当请求中携带指定的请求头信息时,控制器方法才会处理该请求。
序号 | 表达式 | 含义 |
① | “header” | 请求必须携带请求头信息:header |
② | “!header” | 与表达式 ① 的含义完全相反,请求中不能携带请求头信息:header |
③ | “header=value” | 请求中必须携带请求头信息:header=value 。 |
④ | “header!=value” | 与表达式 ③ 的含义完全相反,请求中不能携带请求头信息:header=value。 |
2.6、value可用通配符表示
通配符 | 说明 |
? | 表示任意的单个字符。 |
* | 表示任意的 0 个或多个字符。 |
** | 表示任意的一层或多层目录。 注意,在使用该通配符时,其使用方式只能时是"/**/xxx"。 |
3、获取请求参数
Spring MVC 提供了多种获取请求参数的方式
3.1、通过 HttpServletRequest 获取请求参数
@RequestMapping("/register") public String register(HttpServletRequest request){ String userName= request.getParameter("userName"); String password = request.getParameter("pwd"); log.info("用户:{} , 密码:{}" , userName, password); return "register"; }
3.2、通过控制器方法的形参获取请求参数
@PostMapping(value = "/register") public ModelAndView register(String userName,String password){ log.info("用户:{} , 密码:{}" , userName, password); ModelAndView modelAndView = new ModelAndView(); //给request对象设置一个属性 modelAndView.addObject("userName","zhangsan"); //设置跳转的视图 modelAndView.setViewName("success"); return modelAndView; }
3.3、使用 @RequestParam 注解获取请求参数
@PostMapping(value = "/register") public ModelAndView register(@RequestParam("userName") String userName,@RequestParam("password") String password){ log.info("用户:{} , 密码:{}" , userName, password); ModelAndView modelAndView = new ModelAndView(); //给request对象设置一个属性 modelAndView.addObject("userName","zhangsan"); //设置跳转的视图 modelAndView.setViewName("success"); return modelAndView; }
3.4、通过实体类对象获取请求参数(推荐)
<form th:action="@{/register}" method="post"> 用户名:<input type="text" name="userName"/><br/> 密码:<input type="password" name = "password"/><br/> <button type="submit">提交</button> <button type="reset">重置</button> </form>
@PostMapping(value = "/register") public ModelAndView register(User user){ log.info("用户:{} , 密码:{}" , user.getUserName(), user.getPassword()); ModelAndView modelAndView = new ModelAndView(); //给request对象设置一个属性 modelAndView.addObject("userName","zhangsan"); //设置跳转的视图 modelAndView.setViewName("success"); return modelAndView; }
3.5、中文乱码解决:(web.xml增加以下的过滤器)
<!--请求和响应的字符串过滤器--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>