《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>


目录
相关文章
|
2天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
107 73
|
2天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
2天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
28天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
108 2
|
28天前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
47 2
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
245 2
|
3天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
10天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
55 14
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
50 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
48 2
 SpringBoot入门(7)- 配置热部署devtools工具