二、Spring MVC的RequestMapping注解

上一篇文章搭建起来了hello world。今天主要来看看RequestMapping注解都有什么用法和功能。上一篇文章说了,RequestMapping可以用来映射URL,可以用在类上,也可以用在方法上面。

RequestMapping有以下几个属性:value、method、params、headers,下面简单说一下属性的功能

value:映射请求的url,当只定义一个url的时候,可以不写,即以下两种方式等价:

@RequestMapping("/testRequestMapping")
@RequestMapping(value="/testRequestMapping")

value属性还支持通配符模式:

?:匹配单个字符

*:匹配多个字符,单层路径匹配

**:匹配多层路径

例如:

@RequestMapping("/user/?/ef")
可以匹配:/user/a/ef、/user/s/ef、/user/y/ef、/user/3/ef

@RequestMapping("/user/*/ef")
可以匹配:/user/adf/ef、/user/gggs/ef、/user/y/ef、/user/fdfdf/ef

@RequestMapping("/user/**")
可以匹配:/user/abc、/user/abd、/user/abc/ef

method:定义请求的方式,一共有四种:get、post、put、delete

params:请求参数的定义,定义一次请求必须传递的参数和参数的值

headers:定义请求的头部,params和headers两个不常用

其中params和headers支持简单的表达式

param1:表示请求必须包含名为param1的请求参数
!param1:表示请求不能包含名为param1的请求参数
param1 != value1:表示请求包含参数名为param1的请求参数,但其值不能为value1
{"param1=value1", "param2"}:表示请求必须包含参数名为param1和param2的参数,
且param1的参数值必须为value1

下面结合具体的例子来看一次requestMapping注解及其属性定义的使用方法

1、@RequestMapping注解定义在类上,我的理解,定义在类上,类似于java中的包一样,此时方法访问的路径为:类路径/方法路径,这里为testRequestMapping/greeting

@Controller
@RequestMapping("/testRequestMapping")
public class TestRequestMappingController {
   
    @RequestMapping("/greeting")
    public String greeting() {
        return "greeting";
    }
}

2、method属性的使用,指定请求的方式为post,如果使用get请求的话,就会出现404

@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
    return "greeting";
}

测试代码,上面的链接会出现405的,见下图:

<!-- 请求失败,因为后面定义了请求类型为post  -->
<p>测试注解RequestMapping的method属性,访问失败,因为后台定义了请求为post方式
 <a href="/testRequestMapping/testMethod">test RequestMapping method attr</a>
 </p>

<form action="/testRequestMapping/testMethod" method="post">
    <p>请求成功,因为使用form表单,定义为post请求</p>
    <input type="submit" value="submit" />
</form>

3、params属性的使用,params定义了请求的参数情况,支持表达式,支持数组

/**
 * 使用params参数指定请求参数
 * 此处示例:请求必须包含请求参数name和age,并且age的值不能为10
 * /testRequestMapping/testParams?name=Jim&age=10:请求失败
 * /testRequestMapping/testParams?name=Jim&age=11:请求成功
 * @return
 */
@RequestMapping(value = "/testParams", params = {"name", "age!=10"})
public String testParams() {
    return "greeting";
}

测试代码,上面的链接会出现404的:

<p>测试注解RequestMapping的params属性,后面定义必需name和age,且age不能等于10,访问失败 
<a href="/testRequestMapping/testParams?name=Jim&age=10">test RequestMapping </a>
</p>

<p>测试注解RequestMapping的params属性,后面定义必需name和age,且age不能等于10,访问成功
 <a href="/testRequestMapping/testParams?name=Jim&age=11">test RequestMapping </a>
 </p>

4、headers属性,定义了请求头相关参数,我使用的时firefox浏览器,查看发起请求的请求头,以设定Accept-Language进行测试:

下面定义了两个方法,上面的方法和浏览器中的一致,可以请求成功,下面的方法请求失败

@RequestMapping(value = "/testHedersSuccess", 
headers = {"Accept-Language=zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"})
public String testHedersSuccess() {
    return "greeting";
}

@RequestMapping(value = "/testHedersFailure", 
headers = {"Accept-Language=zh-CN,zh;q=0.8"})
public String testHedersFailure() {
    return "greeting";
}

测试代码如下,上面的出现404:

<p>测试注解RequestMapping的headers属性,失败
 <a href="/testRequestMapping/testHedersFailure">test RequestMapping </a>
 </p>

<p>测试注解RequestMapping的headers属性 ,成功
<a href="/testRequestMapping/testHedersSuccess">test RequestMapping </a>
</p>

5、value属性的通配符定义,下面的示例,不能匹配多个层次,

例如不能匹配:/testWildcardPath/abc/d/ef

@RequestMapping("/testWildcardPath/*/ef")
public String testWildcardPath() {
    return "greeting";
}

测试代码:可以把请求路径中的any替换为任意字符串,不能批评多个层次

<p>url通配符形式 ,可以把请求路径中的any换成任意字符,都可以成功
<a href="/testRequestMapping/testWildcardPath/any/ef">test RequestMapping </a>
</p>

6、于@PathVariable注解的配合使用,RequestMapping的value定义的url可以包含占位符,PathVariable注解就可以把url中的占位符映射到方法的参数上去

@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") int id) {
    System.out.println(id);
    return "greeting";
}

测试代码:后面的11就是参数,方法可以接收到,也可以传递不同的参数

<p>PathVariable测试,11就是参数,方法可以接受到这个参数
<a href="/testRequestMapping/testPathVariable/11">test RequestMapping </a>
</p>

项目源代码:

https://git.oschina.net/acesdream/spring-mvc

时间: 2024-12-25 13:44:54

二、Spring MVC的RequestMapping注解的相关文章

Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法

Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx":意思是返回到某个JSP页面上 如果想在此Action中跳转到另一个Action中怎样做呢? return "redirect://.do?" 例如: @RequestMapping(params = "action=delete") public String del

二、Spring MVC之常用注解

Spring MVC中常用的注解有以下几个:@Controller, @RequestMapping, @PathVariable, @CookieValue, @SessionAttributes.@ResponseBody.@RequestHeader和@ModelAttribute @Controller 上一节创建一个新的项目就用到了@Controller注解.通过这个注解,就可以让组件扫描将一个类识别为控制器组件并进行注册. 注册后,控制器映射到URL上的方法就可以进行请求处理. @R

Spring MVC常用的注解类

一.注解类配置 要使用springmvc的注解类,需要在springmvc.xml配置文件中用context:component-scan/扫描: ? 二.五大重要的注解类 1.RequestMapping注解 RequestMapping注解类的使用方法 在Controller控制器类的类定义和方法定义处都可以标注@RequestMapping注解 DispatcherServlet截获请求后,就可以通过控制器上的@RequestMapping提供的映射信息确定请求所对应的处理方法 packa

Spring MVC 常用的注解

@Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指定,如下 方法一: @Controller public class TestController {} 方法二:            @Controller("tmpController") public class TestController {} @RequestMapping [email protected]用来定义访

Spring MVC(二)--Spring MVC登陆实例

本文通过一个简单的登陆实例实现Spring MVC的流程,同时整合 MyBatis使用,流程是这样的: 1.访问一个URL进入登陆界面 2.输入正确的用户名和密码,成功则进入index页面,否则留在登陆页 一.配置web.xml 创建好WEB项目之后的第一步就是配置web.xml文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="3.0" xmlns=&

Spring MVC的常用注解

1.@Controller 控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示. @COntroller用于标记一个类,即控制类,spring使用扫描机制查找应用程序中所有基于注解的控制类.分发处理器会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解,而使用@RequestMapping注解的方法才是真正处理请

四、Spring MVC的RequestParam注解

前面的章节,有提到可以通过@PathVariable注解来映射restful风格的url中的值到方法中去,本章就看看如果不使用restful风格的url来怎么进行参数的传递. RequestParam就是来实现参数传递的,能够把用户的输入绑定到后台的方法上面.它有三个主要的属性: value:定义参数的名称 required:定义参数是否是必须的,默认是true defaultValue:定义参数的默认值 下面结合具体的示例代码来看一下如何使用: 1.下面的这段代码定义了三个参数,一个name,

Spring MVC中基于注解的 Controller

终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响应请求.实际上,ControllerClassNameHandlerMapping, MultiActionController 和选择恰当的 methodNameResolver(如 InternalPathMethodNameResolver) 就已经可以在很大程度上帮助我们省去不少的 XML 配置,谁让

Spring MVC常用的注解

1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestP