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的资料请关注Devmax其它相关文章!

SpringMVC的注解@RequestMapping属性及使用的更多相关文章

  1. JSP中springmvc配置validator的注意事项

    这篇文章主要介绍了JSP中springmvc配置validator的注意事项的相关资料,并说明springmvc中spring-servlet.xml、applicationContext.xml的区别需要的朋友可以参考下

  2. 一种angular的方法级的缓存注解(装饰器)

    本篇文章主要介绍了一种angular的方法级的缓存注解(装饰器),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. SpringMVC拦截器和异常处理器使用示例超详细讲解

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器参数及拦截器链配置,感兴趣的可以尝试一下

  4. Spring详细讲解@Autowired注解

    @Autowired注解可以用在类属性,构造函数,setter方法和函数参数上,该注解可以准确地控制bean在何处如何自动装配的过程。在默认情况下,该注解是类型驱动的注入

  5. 详解springboot测试类注解

    这篇文章主要介绍了springboot测试类注解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. SpringMVC数据页响应ModelAndView实现页面跳转

    本文主要介绍了SpringMVC数据页响应ModelAndView实现页面跳转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. SpringMVC静态资源配置过程详解

    在javaweb项目中配置了DispatcherServlet的情况下,如果不进行额外配置的话,几乎所有的请求都会走这个servlet来处理,默认静态资源按路径是访问不到的会报404错误,下面就来讲一讲如何配置才能访问到静态资源吧

  8. @FeignClient注解中属性contextId的使用说明

    这篇文章主要介绍了@FeignClient注解中属性contextId的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. 详解SpringMVC中的四种跳转方式、视图解析器问题

    这篇文章主要介绍了SpringMVC的四种跳转方式、视图解析器,springmvc核心配置文件和视图解析器的使用,添加视图解析器,通过案例讲解四种跳转方式,需要的朋友可以参考下

  10. 详解SpringMVC的两种实现方式

    这篇文章主要介绍了SpringMVC的两种实现方式,方式一是通过实现Controller接口,方式二是使用注解开发,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部