SpringMVC的注解@RequestMapping属性及使用

目录
  • SpringMVC注解@RequestMapping
    • 一、@RequestMapping 注解的位置
      • 1. 作用在方法
      • 2. 作用在类
    • 二、@RequestMapping 注解的 value 属性
    • 三、@RequestMapping 注解的 method 属性
      • @RequestMapping 结合请求方式的派生注解
    • 四、@RequestMapping 注解的 params 属性
    • 五、@RequestMapping 注解的 headers 属性

SpringMVC注解@RequestMapping

在之前的 hello world 示例中,用到了 @RequestMapping 注解,它的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。

当 SpringMVC 接受到指定的请求,就会到这个映射关系中找到对应控制器方法来处理这个请求。

一、@RequestMapping 注解的位置

在示例中,注解是用在了方法上,除此之外,还可以用在类上。

1. 作用在方法

@Controller
public class RequestMappingController {

    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        return "success";
    }
}

此时请求映射所映射的请求的请求路径为:/testRequestMapping。

2. 作用在类

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

    //此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        return "success";
    }
}

此时请求映射所映射的请求的请求路径为:/test/testRequestMapping。

作用在类上以后会经常用到,比如有2个模块:用户和订单,那么每个模块下都会有自己的列表接口 /list。

为了更好的通过名称区分出不同模块,可以给两个类上加上注解,使其最终路径为/user/list、/order/list。

当然,你也可以不用类的注解,直接在方法的注解上做区分,比如/userList和/orderList。

总之,一个请求只能有一个控制器来处理,如果你两个不同的控制器方法,都使用/list,那么请求过来的时候就不知道该找哪个处理,会报错。

二、@RequestMapping 注解的 value 属性

value 属性通过请求的请求地址匹配请求映射,是必须设置的,否则请求地址匹配不到映射。

另外,value 属性也是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址的请求。

@Controller
public class RequestMappingController {

    @RequestMapping(
            value = {"/test1", "/test2"}
    )
    public String testRequestMapping(){
        return "success";
    }
}

这里不管请求地址是/test1还是/test2,都可以找到控制器 testRequestMapping(),返回 success.html 。

三、@RequestMapping 注解的 method 属性

method属性通过请求的请求方式,比如 get 或 post ,来匹配请求映射。

method 属性是一个 RequestMethod 类型的数组,表示该请求映射能够匹配多种请求方式的请求。

若当前请求的请求地址满足请求映射的 value 属性,但是请求方式不满足 method 属性,比如控制器是设置是 GET 请求方法,但是请求发送是 post:

@Controller
public class RequestMappingController {

    @RequestMapping(
            value = {"/test1"},
            method = {RequestMethod.GET}
    )
    public String testRequestMapping(){
        return "success";
    }
}

index.html 添加 post 发送:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <h1>Hello World</h1>
    <a th:href="@{/target}" rel="external nofollow" >访问目标页面 target.html </a>
    <br>
    <a th:href="@{/test1}" rel="external nofollow" >测试@RequestMapping的value属性-->/test1</a><br>
    <a th:href="@{/test2}" rel="external nofollow" >测试@RequestMapping的value属性-->/test2</a><br>
    <a th:href="@{/test}" rel="external nofollow" >测试@RequestMapping的method属性-->/test</a><br>
    <form th:action="@{/test1}" method="post">
        <input type="submit">
    </form>
</body>
</html>

点击 submit 按钮,浏览器报错405:Request method 'POST' not supported。

如果继续添加 post 方法支持,则可以正常访问:

@Controller
public class RequestMappingController {

    @RequestMapping(
            value = {"/test1"},
            method = {RequestMethod.GET, RequestMethod.POST}
    )
    public String testRequestMapping(){
        return "success";
    }
}

@RequestMapping 结合请求方式的派生注解

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

  • @GetMapping:处理 get 请求的映射
  • @PostMapping:处理 post 请求的映射
  • @PutMapping:处理 put 请求的映射
  • @DeleteMapping:处理 delete 请求的映射

使用这种注解,就不需要设置 method 属性了。

@GetMapping("/test3")
    public String testGetMapping() {
        return "success";
    }

四、@RequestMapping 注解的 params 属性

最常用的还是上面说的 value 和 method 属性,其他的仅做了解。

params 属性通过请求的请求参数匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系:

param:要求请求映射所匹配的请求必须携带 param 请求参数

!param:要求请求映射所匹配的请求必须不能携带 param 请求参数

param=value:要求请求映射所匹配的请求必须携带 param 请求参数且 param=value

param!=value:要求请求映射所匹配的请求必须携带 param 请求参数但是 param!=value

举个例子:

@RequestMapping(
            value = {"/test1"},
            method = {RequestMethod.GET, RequestMethod.POST},
            params = {"username", "password!=123456"}
    )
    public String testRequestMapping(){
        return "success";
    }

这里params = {"username", "password!=123456"}的意思就是,请求中必须带有参数username和password,且password参数的值必须不等于123456。

五、@RequestMapping 注解的 headers 属性

同样作个了解。

headers 属性通过请求的请求头信息匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系:

  • header:要求请求映射所匹配的请求必须携带header请求头信息
  • !header:要求请求映射所匹配的请求必须不能携带header请求头信息
  • header=value:要求请求映射所匹配的请求必须携带header请求头信息且header=value
  • header!=value:要求请求映射所匹配的请求必须携带header请求头信息且header!=value

若当前请求满足 @RequestMapping 注解的 value 和 method 属性,但是不满足 header 属性,此时页面显示404错误,即资源未找到。

@RequestMapping(
            value = {"/test1"},
            method = {RequestMethod.GET, RequestMethod.POST},
            params = {"username", "password!=123456"},
            headers = {"Host=localhost:8081"}  // 这里端口变成8081
    )
    public String testRequestMapping(){
        return "success";
    }

我本地端口是 8080,现在去请求页面,会报错。

感谢《尚硅谷》的学习资源。

以上就是SpringMVC的注解@RequestMapping属性及使用的详细内容,更多关于SpringMVC注解@RequestMapping的资料请关注我们其它相关文章!

(0)

相关推荐

  • 类添加注解@RequestMapping报错HTTP Status 404的解决

    目录 类添加注解@RequestMapping报错HTTP Status 404 springMVC使用@RequestMapping遇到的问题 1.简介 2.属性简介 3.测试使用时遇到的问题 解决后的源码是 类添加注解@RequestMapping报错HTTP Status 404 为类添加了@RequestMapping注解后,运行报错404,路径不对,找了半天才发现原来是我的视图解析器的前缀没有写正确 在WEB-INF前面少加了一个/,加上之后运行ok springMVC使用@Reque

  • 解决SpringMVC @RequestMapping不设置value出现的问题

    目录 SpringMVC @RequestMapping不设置value 从上个项目拷贝过来的form的action属性忘了修改了 Spring mvc中@RequestMapping 6个基本用法小结 1.最基本的,方法级别上应用 2.参数绑定 3.REST风格的参数 4.REST风格的参数绑定形式之2 5.url中同时绑定多个id 6.支持正则表达式 SpringMVC @RequestMapping不设置value 从上个项目拷贝过来的form的action属性忘了修改了 在control

  • 基于SpringMVC @RequestMapping的参数和用法

    @RequestMapping的参数和用法 RequestMapping里面的注解包含的参数如图: RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. @RequestMapping 除了修饰方法, 还可来修饰类 : 类定义处:提供初步的请求映射信息.相对于 WEB 应用的根目录: 方法处:提供进一步的细分映射信息. 相对于类定义处的 URL. 若类定义处未标注 @RequestMapping,则方法处标

  • SpringMVC @RequestMapping注解详解

    目录 一.@RequestMapping 1.@RequestMapping注解的功能 2.@RequestMapping注解的位置 二.@RequestMapping注解的属性 1.value属性(掌握) 2.method属性(掌握) 3.params属性(了解) 4.headers属性(了解) 5.SpringMVC支持ant风格的路径 6.SpringMVC支持路径中的占位符(重点) 三.@RequestMapping的派生类注解 测试form表单是否支持put或delete方式的请求 一

  • Java工具类之@RequestMapping注解

    一.前言 问题阐述:在某一场景下,我们的代码在 Service 实现相同,但却在 Controller 层访问时却希望不同的前缀可以访问.如下 :/say/hello.我们这里希望在不借助任何外部服务的情况下 通过 /a/say/hello 和 /b/say/hello 都可以访问到该接口,同时不想在 Controller 中写两个方法. @RestController @RequestMapping("say") public class SayController { @Autow

  • SpringMVC的注解@RequestMapping属性及使用

    目录 SpringMVC注解@RequestMapping 一.@RequestMapping 注解的位置 1. 作用在方法 2. 作用在类 二.@RequestMapping 注解的 value 属性 三.@RequestMapping 注解的 method 属性 @RequestMapping 结合请求方式的派生注解 四.@RequestMapping 注解的 params 属性 五.@RequestMapping 注解的 headers 属性 SpringMVC注解@RequestMapp

  • SpringMVC通过注解获得参数的实例

    SpringMVC可以通过RequestParam注解来映射获得参数,具体用法如下: 例子: 配置过程省略 1.新建controller类 package com.loger.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class RequestParam

  • SpringMVC基于注解方式实现上传下载

    目录 一.文件下载 1-1.servlet原生方式下载 1-2.使用ResponseEntity实现下载 二.文件上传 2-1.添加commons-fileupload依赖 2-2.配置spring.xml注入CommonsMultipartResolver文件上传解析器 2-3.文件上传 一.文件下载 1-1.servlet原生方式下载 /**  * 基于servlet api的文件下载  */ @RequestMapping("/download") public String d

  • SpringMVC使用注解实现登录功能

    本文实例为大家分享了SpringMVC使用注解实现登录的具体代码,供大家参考,具体内容如下 一.使用Component\Controller\Service\Repository四大注解类: @Component 是通用标注 @Controller 标注 web 控制器 @Service 标注 Servicec 层的服务 @Respository 标注 DAO层的数据访问 这些注解都是类级别的,可以不带任何参数,也可以带一个参数,代表bean名字,在进行注入的时候就可以通过名字进行注入了. 二.

  • springMVC自定义注解,用AOP来实现日志记录的方法

    需求背景 最近的一个项目,在项目基本完工的阶段,客户提出要将所有业务操作的日志记录到数据库中,并且要提取一些业务的关键信息(比如交易单号)体现在日志中. 为了保证工期,在查阅了资料以后,决定用AOP+自定义注解的方式来完成这个需求. 准备工作 自定义注解需要依赖的jar包有 aspectjrt-XXX.jar ,aspectjweaver-XXX.jar,XXX代表版本号. 自定义注解 在项目下单独建立了一个log包,来存放日志相关的内容 **.common.log.annotation //自

  • SpringMVC使用注解配置方式

    目录 SpringMVC注解配置方式 一.创建初始化类 二.spring的配置类 三.WebConfig 配置类 剩余配置 SpringMVC注解配置方式 使用配置类和注解代替 web.xml 和 SpringMVC配置文件 的功能. 一.创建初始化类 在 Servlet3.0 环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置 Servlet 容器. Spring 提供了这个接口的实现,名为Spr

  • SpringMVC常用注解载入与处理方式详解

    目录 一 . 前言 二 . RestController 部分 三 . RequestMapping 部分 四 . RequestParam和PathVariable 五 . RequestBody 和 ResponseBody 总结 一 . 前言 这一篇来看一下SpringMVC 中各个注解载入的方式和处理的时机 二 . RestController 部分 RestController 注解主要的作用是Bean的加载 , 值得关注的注解包括 : @Controller 和 @ResponseB

  • 通过@Resource注解实现属性装配代码详解

    本文主要探究的问题时使用@Resource注解实现属性装配,当中涉及依赖注入-手工装配,@Autowired和@Resource注解的区别等相关内容,具体如下. 使用Field注入(用于注解方式):注入依赖对象可以采用手工装配或者手工自动装配.在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 依赖注入-手工装配 手工装配依赖对象,在这种方式中又有两种编程方式. 1.在xml配置文件中,通过bean节点配置,如: <bean id="orderSer

  • Spring通过配置文件和注解实现属性赋值

    前言 在实际开发当中,Spring中bean的属性直接赋值用的不是太多,整理这方面的资料,做一个小结,以备后续更深入的学习. 通过配置文件的方式 以配置文件的方式启动spring容器时,可以使用property标签的value给bean的属性赋值,赋值的形式有以下几种: <--通过context:property-placeholder将properties文件中的值加载的环境变量中(properties中的属性值最终是以环境变量的形式存储的)> <context:property-pl

随机推荐