3、SpringMVC之RequestMapping注解

这篇具有很好参考价值的文章主要介绍了3、SpringMVC之RequestMapping注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3.1、环境搭建

创建名为spring_mvc_demo的新module,过程参考2.1节

3.1.1、创建SpringMVC的配置文件

3、SpringMVC之RequestMapping注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--在指定的包中,扫描控制层组件-->
    <context:component-scan base-package="org.rain.controller"></context:component-scan>

    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean
                            class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

</beans>

3.1.2、配置web.xml

3、SpringMVC之RequestMapping注解

    <!--配置SpringMVC的前端控制器DispatcherServlet,对浏览器发送的请求统一进行处理-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--通过初始化参数指定SpringMVC配置文件的位置和名称-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--将DispatcherServlet的初始化时间提前到服务器启动时-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3.1.3、创建请求控制器

3、SpringMVC之RequestMapping注解

package org.rain.controller;

import org.springframework.stereotype.Controller;

/**
 * @author liaojy
 * @date 2023/9/21 - 8:47
 */
@Controller
public class TestRequestMappingController {
}

3、SpringMVC之RequestMapping注解

package org.rain.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author liaojy
 * @date 2023/9/21 - 8:49
 */
@Controller
public class PortalController {

    @RequestMapping("/")
    public String portal(){
        return "index";
    }

}

3.1.4、创建静态资源目录及页面

3、SpringMVC之RequestMapping注解

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<h1>index.html</h1>

</body>
</html>

3、SpringMVC之RequestMapping注解

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>成功</title>
</head>
<body>
<h1>success.html</h1>
</body>
</html>

3.1.5、配置tomcat

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

细节请参考2.6节

3.2、注解的功能

  • 从注解名称上可以看出,@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系;

  • SpringMVC 的前端控制器(DispatcherServlet)接收到请求后,就会在映射关系中找到对应的控制器方法来处理这个请求;

3.3、注解的位置

3.3.1、源码定义

3、SpringMVC之RequestMapping注解

从源码可知,@RequestMapping注解既可以标识在类上,也可以标识在方法上

3.3.2、控制器示例

  • @RequestMapping标识在类上:设置映射请求的基础信息

  • @RequestMapping标识在方法上:设置映射请求的具体信息

3、SpringMVC之RequestMapping注解

@Controller
@RequestMapping("/test")
public class TestRequestMappingController {

    // 此时控制器方法所匹配的请求的请求路径为:/test/hello
    @RequestMapping("/hello")
    public String hello(){
        return "success";
    }

}

3.3.3、请求示例

3、SpringMVC之RequestMapping注解

注意html要引入thymeleaf的约束:xmlns:th="http://www.thymeleaf.org"

<a th:href="@{/hello}">测试/hello请求</a>

<a th:href="@{/test/hello}">测试/test/hello请求</a>

3.3.4、测试效果

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.3.5、双重位置的作用

可以根据业务需要划分模块,在请求路径中就可以体现出请求的是哪个模块的资源

3.4、注解的value属性

@RequestMapping注解的value属性必须设置,其作用是根据请求路径来匹配请求

3.4.1、源码定义

3、SpringMVC之RequestMapping注解

value属性的别名是path,所以用path属性代替也可以;

value属性是字符串数组类型,所以可以设置多个值;

3.4.2、匹配多个请求的控制器示例

3、SpringMVC之RequestMapping注解

普通的servlet,也可以在web.xml的<servlet-mapping>标签中,设置多个<url-pattern>子标签,从而实现同样的效果

    @RequestMapping({"/hello","/hi"})

3、SpringMVC之RequestMapping注解

<a th:href="@{/test/hi}">测试/test/hi请求</a>

3.4.3、测试效果

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.5、注解的method属性

  • @RequestMapping注解的method属性的作用是,根据请求方式(get或post)匹配请求

  • 若当前请求的请求地址满足value属性,但是请求方式不满足method属性,
    则浏览器报错 405:Request method '请求方式' not supported

3.5.1、源码定义

3、SpringMVC之RequestMapping注解

method属性是RequestMethod数组类型,所以可以设置多个值;

3、SpringMVC之RequestMapping注解

RequestMethod是枚举类型,有固定的可选值

3.5.2、控制器示例

3、SpringMVC之RequestMapping注解

    @RequestMapping(value = {"/hello","/hi"},method = {RequestMethod.GET,RequestMethod.POST})

3.5.3、请求示例

3、SpringMVC之RequestMapping注解

<!--除了form表单和Ajax设置为post请求之外,其他诸如超链接、直接浏览器地址栏访问等均为get请求-->
<a th:href="@{/test/hello}">测试/test/hello请求</a>

<!--表单默认为get请求,使用post请求须显式设置-->
<form th:action="@{/test/hello}" method="post">
    <input type="submit" value="测试@RequestMapping注解的method属性的post请求">
</form>

3.5.4、测试效果

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

++++++++++++++++++++++++++分割线++++++++++++++++++++++++++

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.5.5、结合请求方式的派生注解

对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解

  • 处理get请求的派生注解-->@GetMapping

  • 处理post请求的派生注解-->@PostMapping

  • 处理put请求的派生注解-->@PutMapping

  • 处理delete请求的派生注解-->@DeleteMapping

3、SpringMVC之RequestMapping注解

    // 只处理post请求方式的请求
    @PostMapping("/hello")

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

++++++++++++++++++++++++++分割线++++++++++++++++++++++++++

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.6、注解的params属性(了解)

  • @RequestMapping注解的params属性的作用是,根据请求参数匹配请求

  • 浏览器发送的请求的请求参数,必须满足params属性的设置(如果有的话)
    否则报错:HTTP状态 400 - 错误的请求

3.6.1、源码定义

3、SpringMVC之RequestMapping注解

params属性是字符串数组类型,所以可以设置多个值;

注意:请求必须满足params属性所有值的要求。

3.6.2、params属性的四种表达式

  • "param":表示所匹配的请求的请求参数中,必须携带param参数

  • "!param":表示所匹配的请求的请求参数中,必须不能携带param参数

  • "param=value":表示所匹配的请求的请求参数中,必须携带param参数,且值必须为value

  • "param!=value":表示所匹配的请求的请求参数中,可以不携带param参数;若携带param参数,其值必须不能为value

3.6.3、控制器示例

3、SpringMVC之RequestMapping注解

    @RequestMapping(
            value = {"/hello","/hi"},
            method = {RequestMethod.GET,RequestMethod.POST},
            params = {"username","!password","age=18","gender!=女"}
            )

3.6.4、请求示例

3、SpringMVC之RequestMapping注解

<!--使用传统的?分隔符传参,虽然是有效果的,但thymeleaf语法会有错误提示-->
<a th:href="@{/test/hello?username=admin&age=18}">测试@RequestMapping注解的params属性(传统?传参)</a>

<br><br>

<!--thymeleaf语法的标准传参方式,注意字符串要用单引号-->
<a th:href="@{/test/hello(username='admin',age=18)}">测试@RequestMapping注解的params属性(thymeleaf语法传参)</a>

3.6.5、测试效果

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

++++++++++++++++++++++++++分割线++++++++++++++++++++++++++

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

++++++++++++++++++++++++++分割线++++++++++++++++++++++++++

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.7、注解的headers属性(了解)

  • @RequestMapping注解的headers属性的作用是,根据请求头信息匹配请求

  • 浏览器发送的请求的请求头信息,必须满足headers属性的设置(如果有的话)
    否则报错:HTTP状态 404 - 未找到

3.7.1、源码定义

3、SpringMVC之RequestMapping注解

headers属性是字符串数组类型,所以可以设置多个值;

注意:请求必须满足headers属性所有值的要求。

3.7.2、headers属性的四种表达式

  • "header":表示所匹配的请求,必须携带header请求头信息

  • "!header":表示所匹配的请求,必须不能携带header请求头信息

  • "header=value":表示所匹配的请求,必须携带header请求头信息,且值必须为value

  • "header!=value":表示所匹配的请求,可以不携带header请求头信息;若携带header请求头信息,其值必须不能为value

3.7.3、控制器示例

3、SpringMVC之RequestMapping注解

注意:请求头信息的键不区分大小写,但其值区分大小写

    @RequestMapping(
            value = {"/hello","/hi"},
            method = {RequestMethod.GET,RequestMethod.POST},
            params = {"username","!password","age=18","gender!=女"},
            headers = {"referer"}
            )

3.7.4、请求示例

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

Referer请求头表示请求的来源,本例的请求来源为http://localhost:8080/spring_mvc_demo/

3、SpringMVC之RequestMapping注解

如果是通过浏览器地址栏直接访问,是没有Referer(请求来源)的

3.8、ant风格的路径

3.8.1、通配符

  • ? :表示任意的单个字符(不包括 ? 和 / ,因为它们是分隔符)

  • * :表示任意个数的任意字符(不包括 ? 和 / )

  • ** :表示任意层数的任意目录(其用法是 /**/xxx 的方式)

3.8.2、? 通配符示例

3、SpringMVC之RequestMapping注解

    @RequestMapping("/a?a")
    public String testAnt(){
        return "success";
    }

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.8.3、* 通配符示例

3、SpringMVC之RequestMapping注解

    @RequestMapping("/a*a")
    public String testAnt(){
        return "success";
    }

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.8.4、** 通配符示例

3、SpringMVC之RequestMapping注解

    @RequestMapping("/**/aa")
    public String testAnt(){
        return "success";
    }

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3.9、路径中的占位符(重点)

  • 原始风格的请求(?分隔符前面是路径,后面是参数):/deleteUser?id=1

  • RESTful 风格的请求(参数是路径的一部分):/user/delete/1

  • SpringMVC 路径中的占位符常用于RESTful风格中;

  • 在@RequestMapping注解的value属性中,通过占位符{xxx}表示路径中传输的数据;

  • 再通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参。

3.9.1、控制器示例

3、SpringMVC之RequestMapping注解

对于占位符的数据类型,@PathVariable注解会自动转换赋值给控制器方法的形参

    @RequestMapping("/rest/{restfulId}/{restfulUsername}")
    public String testRestful(@PathVariable("restfulId") Integer id,@PathVariable("restfulUsername") String username){
        System.out.println("id:"+id);
        System.out.println("username:"+username);
        return "success";
    }

3.9.2、请求示例

3、SpringMVC之RequestMapping注解

<a th:href="@{/test/rest/12345/zhangsan}">测试@RequestMapping注解的value属性中的占位符</a>

3.9.3、测试效果

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解

3、SpringMVC之RequestMapping注解文章来源地址https://www.toymoban.com/news/detail-710249.html

到了这里,关于3、SpringMVC之RequestMapping注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC中@RequestMapping注解的详细说明

    @RequestMapping 是Spring MVC中一个用于映射HTTP请求和控制器方法之间关系的注解。它用于定义控制器方法如何响应特定的HTTP请求,包括GET、POST、PUT、DELETE等。以下是 @RequestMapping 注解的详细说明: 基本用法: @RequestMapping 用于注解一个控制器方法,指定该方法应该处理的请求路径

    2024年02月07日
    浏览(32)
  • springMVC-@RequestMapping

    @RequestMapping注解可以指定控制器/处理器的某个方法的请求的url, 示例 (结合springMVC基本原理理解) @RequestMapping不仅可以修饰方法, 还可以 修饰类 当同时修饰类和方法时,jsp请求的url 就是/类请求值/方法请求值 @RequestMapping还可以指定请求的方式(post/get/put/delete..) 相应地, 

    2024年02月04日
    浏览(36)
  • 【Java EE】@RequestMapping注解

    在Spring MVC 中使⽤ @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤ 我们先来看看代码怎么写 创建⼀个 TalkController 类,实现⽤⼾通过浏览器和程序的交互,具体实现代码如下: 这时候我们使用浏览器访问 http://127.0.0.1:8080/hi 就可访问 @RequestMapping 是Spring Web M

    2024年04月09日
    浏览(31)
  • Spring MVC 的RequestMapping注解

    作用:用于建立请求URL和处理请求方法之间的对应关系。 出现位置: 类上: 请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理,例如: 账户模块: /account /add /account /update /account

    2024年02月02日
    浏览(31)
  • Spring MVC-@RequestMapping注解详解

    目录 1、@RequestMapping注解的作用 2、@RequestMapping注解的位置 3、value属性 (1)基础用法 (3)路径中的占位符(重点) 4、method属性 5、params属性(了解) 6、headers属性(了解) @RequestMapping注解的作用,就是 将请求和处理请求的控制器方法关联起来 ,建立映射关系。 SpringMVC接

    2023年04月24日
    浏览(34)
  • Spring MVC学习之——RequestMapping注解

    用于建立请求URL和处理请求方法之间的对应关系。 value:指定请求的实际地址,可以是一个字符串或者一个字符串列表。 value可以不写,直接在括号中写,默认就是value值 @RequestMapping(value=“/hello”) public String hello(){ return…} method:指定请求的方式,可以是GET、POST、PUT、DELE

    2024年01月18日
    浏览(43)
  • 学习注解的使用模拟RequestMapping解析path

    注解在后端开发过程中提供了许多的便利,提高了代码简洁性和可读性,在应用程序中占据越来越重要的作用,很有学习的必要,接下来会通过代码来完成对类、方法、属性注解的解析。 回到顶部 代理类会使我们获取注解失败,要做特殊处理。

    2024年02月16日
    浏览(35)
  • Spring MVC @Controller和@RequestMapping注解

    @Controller 注解可以将一个普通的 Java 类标识成控制器(Controller)类,示例代码如下。 Spring MVC 是通过组件扫描机制查找应用中的控制器类的,为了保证控制器能够被 Spring MVC 扫描到,我们还需要在 Spring MVC 的配置文件中使用  context:component-scan/  标签,指定控制器类的基本包

    2024年02月09日
    浏览(34)
  • @RequestMapping和@FeginClient注解不能同时使用的问题

    在新版本SpringCloud中,增加了契约验证,当一个类上同时使用@RequestMapping 和 @FeignClient 注解时,会抛出此异常信息:java.lang.IllegalArgumentException: @RequestMapping annotation not allowed on @FeignClient interfaces 将类上的@RequestMapping注解删掉,将路径更改到每个方法的路径上即可,然后使用@

    2024年02月03日
    浏览(29)
  • 【注解】@RestController、@GetMapping、@PostMapping、@RequestMapping等RESTful风格的Web服务的注解

    @RestController 是 Spring 4.0 引入的一个注解,它是 @Controller 和 @ResponseBody 的组合。 用于标识一个类,表示这个类是一个控制器,并且其中的方法会返回 JSON 格式的数据。通常用于构建 RESTful API。 @RequestMapping 用于映射 HTTP 请求到控制器的处理方法。 可以用在类级别和方法级别。

    2024年01月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包