Talk is cheap , show me your code!
欢迎来到付振南Java博客,让我们一起学习Java吧!

RequestMapping注解

今天给大家讲解一下SpringMVC中的RequestMapping这个注解。

@RequestMapping,看名字我们就知道,这个注解的作用是映射,那么什么映射到什么呢?

在http发送请求后,我们可以通过@RequestMapping注解来讲http请求路由映射到后端controller的处理的方法上,这大概就是这个注解的作用了。

SpringMVC执行原理

从前面的SpringMVC执行原理中我们可以看到,客户端发出的request请求都会到我们的调度平台DispatcherServlet中,然后这个调度平台会请求查找Handler,我们通过@RequestMapping注解在controller中映射要执行的方法,这样处理器映射器就知道返回具体哪个执行链了,我们通过一个小案例来讲解一下。

我们在controller包中创建一个HelloController类,然后写一个返回值为String类型的sayHello方法,并且打印输出一句话,跳转到success页面。

public String testRequestMapping(){
System.out.println("测试RequestMapping。。。");
return "success";
}

controller类中的方法写好了,接下来我们去jsp页面写客户端的东西了,我们简单点,直接写一个超链接就行。

<h3><a href="">点这</a></h3>

可是,这样写好了之后,前端页面的超链接和后端的方法根本没有任何关系呀?所以我们需要用到@RequestMapping注解来映射。

我们要的效果是,超链接点击以后,执行sayHello方法,跳转到success页面,所以我们需要在href属性建立和sayHello方法的联系。

我们先来看看@RequestMapping的源码。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
   String name() default "";
   @AliasFor("path")
   String[] value() default {};
   @AliasFor("value")
   String[] path() default {};
   RequestMethod[] method() default {};
   String[] params() default {};
   String[] headers() default {};
   String[] consumes() default {};
   String[] produces() default {};
}

我们可以看到,@RequestMapping注解既可以加在类上,也可以加在方法上。那么首先我们在controller类上添加一个@RequestMapping注解,路径path就写一个user吧,然后在方法上也加一个@RequestMaping注解,路径path就写上hello吧。

/**
 * 控制层
 * @author fuzhennan
 */
@Controller
@RequestMapping(path = "user")
public class HelloController {

/**
 * 第一个入门案例
 * @return
 */
 @RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("Hello springMVC");
return "success";
}
}

然后jsp页面中超链接的href属性我们就知道怎么写了。

<h3><a href="/user/hello">点这</a></h3>

点击前端的超链接后,跳转到success页面,后端控制台也成功打印出了方法中的输出语句,说明我们已经映射成功了。

我们再看看看@RequestMapping的几个重要的属性吧。

*      path:指定请求的url
*      value:和path一样
*      method:指定请求方式,  RequestMethod.GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
*          由于超链接默认是get请求方式,在这指定为method = {RequestMethod.POST}会报错,HTTP Status 405 – 方法不允许
*      params:用于限制请求参数的条件。要求请求的参数key和value必须一致
*          例如,指定需要传一个key为username,value为haha,那么在请求的时候key和value必须为username和haha,否则会报错
*              Parameter conditions "username=haha" not met for actual request parameters: username={hha}
*      headers:用于指定限制请求消息头的条件

我们path属性已经用来指定路径了,value属性也差不多,就不再尝试了,我们看看它的method属性,header属性和params属性。

我们在HelloController类中在写一个新的方法吧,方法名就叫做testRequestMapping吧,然后给它加上一个@RequestMapping注解,path属性就写testRequestMapping吧,因为我们测试的是超链接,默认是get请求方式,method就写get方法吧,我们给header属性传一个accept,说明我们只需要请求头中的accept的值,然后params属性我们写一个username="haha",在这里我们要注意,我们这里params的key是username,value是haha,待会我们前端的jsp页面也许也要是这个,必须严格保持一致,不然就会报错。

@RequestMapping(path = "/testRequestMapping",params = {"username=haha"},headers = {"Accept"},method = {RequestMethod.GET})
public String testRequestMapping(){
System.out.println("测试RequestMapping。。。");
return "success";
}

然后我们在jsp页面中写一个超链接。

<h3><a href="/user/testRequestMapping?username=haha">点这</a></h3>

启动tomcat服务器,看看运行结果。

浏览器点击超链接后,页面成功跳转到success页面,并且后端控制的也成功打印出了方法中的输出语句,说明我们的映射配置对了。

好了@RequestMapping注解的作用和属性差不多就这些了,大家可以看看源码,再研究研究。

赞(0) 打赏
未经允许不得转载:付振南Java博客 » RequestMapping注解

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

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

支付宝扫一扫打赏

微信扫一扫打赏