《Spring MVC》 第三章 @Controller、@RequestMapping 注解和获取请求参数

简介: 《Spring MVC》 第三章 @Controller、@RequestMapping 注解和获取请求参数

前言

使用@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>


目录
相关文章
|
15天前
|
前端开发 Java Spring
Spring MVC 是如何对对象参数进行校验的
【6月更文挑战第4天】对象参数校验是使用 SpringMVC 时常用的功能,这篇文章尝试分析了,Spring 是如何实现这一功能的。
28 5
|
1月前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
312 3
|
2天前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
6 1
|
2天前
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
4天前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring MVC 响应
【JavaEE进阶】 关于Spring MVC 响应
14 3
|
13天前
|
JSON 前端开发 Java
Spring MVC 级联对象参数校验
【6月更文挑战第6天】在 Spring MVC 的使用过程中,我们会发现很多非常符合直觉的功能特性,但往往我们会习惯这种「被照顾得很好」的开发方式,依靠直觉去判断很多功能特性的用法。
17 1
|
18天前
|
JSON 前端开发 Java
Spring第四课,MVC终章,应用分层的好处,总结
Spring第四课,MVC终章,应用分层的好处,总结
|
19天前
|
JSON 前端开发 Java
Spring Web MVC入门(3)——响应
Spring Web MVC入门(3)——响应
24 1
|
26天前
|
存储 前端开发 Java
Spring MVC
Spring MVC
24 2
|
26天前
|
存储 JSON 前端开发
利用Spring MVC开发程序2
利用Spring MVC开发程序
27 1