RequestMapping注解说明

@RequestMapping注解的作用将Web请求映射到特定处理程序类和/或处理程序方法,这个注解可以用于类或者方法上,并通过属性value指定请求路径。用在Controller类上表示提供初步的URL请求映射信息,相对于Web应用的根目录,这是一个前置请求路径。用在Controller中方法上,表示提供详细的URL映射。如果Controller类上没有加RequestMapping注解,则方法上注解标记的URL则是相对于Web应用的根目录。

@RequestMapping注解提供以下几个属性:

name:用于指定映射器名称

value:用于指定映射路径,同path

path:用于指定映射路径,同value

method:用于指定请求类型:GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE

params:指定请求的参数

headers:指定请求头部,源码示例:RequestMapping(value = "/something", headers = "content-type=text/*")

consumes:指定处理请求提交的内容类型(Content-Type),例如application/json, text/html,只有在Content-Type匹配这些媒体类型之一时才会映射请求

produces:指定请求返回的内容类型 例如:produces = "application/json; charset=UTF-8"

通过value属性指定映射路径

Controller类上使用RequestMapping注解

@Controller
@RequestMapping("order")
public class OrderInfoController {
//示例1
@RequestMapping("orderinfo")
public ModelAndView OrderInfo1() {
return new ModelAndView("order/info", "message", "OrderInfo");
}
}

在OrderController类上添加了注解RequestMapping("order"),表示所有对的请求必须是以“根目录/order” 开始

示例1的请求路径为:http://localhost:8080/springMvcNext/order/orderinfo

示例1 如果注释掉Controller上的@RequestMapping("order"),则对应的请求路径为:http://localhost:8080/springMvcNext /orderinfo

Controller方法上使用RequestMapping注解

1.常用基础用法

@Controller
@RequestMapping("order")
public class OrderInfoController { //示例1
@RequestMapping("orderinfo")
public ModelAndView OrderInfo1() {
return new ModelAndView("order/info", "message", "OrderInfo");
}
//示例2 :处理多个url映射
@RequestMapping({"info","index"}) //或者@RequestMapping(value={"info","index"})
public ModelAndView OrderInfo2() {
return new ModelAndView("order/info","message", "OrderInfo2");
} //示例3
@RequestMapping
public ModelAndView OrderInfo3() {
return new ModelAndView("order/info","message", "OrderInfo3");
}
}

RequestMapping只配置value属性,不显示配置其他属性的情况下,value省略,直接填写URL映射信息即可,指定其他属性的情况下value属性必须明确填写

上例示例1的访问路径为: http://localhost:8080/springMvcNext/order/orderinfo

示例2:RequestMapping接口中value属性是一个数组,所有也支持传一个数组 示例2的访问路径:http://localhost:8080/springMvcNext/order/index  或者 http://localhost:8080/springMvcNext/order/info

示例3:当value为空时,表示该方法为类下默认的Action,示例3的访问路径为:http://localhost:8080/springMvcNext/order

2.URL模板映射

在RequestMapping注解中声明URI变量,并通过@PathVariable注解的方式访从实际请求URL中获取值,示例如下:

@Controller
public class OrderInfoController {
// 示例10 带占位符的URL
@RequestMapping(value = "user/{userId}/order/{orderNumber}", method = RequestMethod.GET)
public ModelAndView OrderInfo4(@PathVariable int userId,@PathVariable String orderNumber) {
return new ModelAndView("order/info", "message", "userid:"+userId+" orderNumber:"+orderNumber);
}
}

示例10请求URL:  http://localhost:8080/springMvcNext/user/12/order/333 当通过此URL发起请求时,SpringMVC将通过@PathVariable可以提取URL模板中的{×××}中的×××变量, URL变量会自动转换为对应的类型,无法转换的则返回错误,比如尝试用以下url访问:http://localhost:8080/springMvcNext/user/xxx/order/333  其中参数Userid=xxx,则发生错误:

3.Ant风格的URL路径映射

Ant风格通配符如下:

  •  匹配一个字符
  • *    匹配路径段中的零个或多个字符
  • **  匹配零个或多个路径段

示例:

@Controller
public class OrderInfoController {
// 示例11 带占位符的URL
@RequestMapping(value = "order*", method = RequestMethod.GET)
//@RequestMapping(value = "order?", method = RequestMethod.GET)
//@RequestMapping(value = "order/**", method = RequestMethod.GET)
public ModelAndView OrderInfo5(String orderNumber) {
return new ModelAndView("order/info", "message", "OrderInfo5");
}
}

示例11请求URL:  http://localhost:8080/springMvcNext/order/orderdexx?orderNumber=12 可以匹配http://localhost:8080/springMvcNext/order/orderXXXXX?orderNumber=yyyy的所有请求

@RequestMapping(value = "order?", method = RequestMethod.GET)可以匹配诸如 “…/ordera?orderNumber….” “…/orders?orderNumber….”

@RequestMapping(value = "order/**", method = RequestMethod.GET)可以匹配诸如 “…/order/aaa?orderNumber….” “…/order/bbb/ccc?orderNumber….”

另外 RequestMapping还支持正则表达式风格的URL路径映射,此处略过

通过method属性指定请求类型

RequestMapping提供的method属性请求谓词的类型,如下示例示例只接受GET请求

    // 示例4
@RequestMapping(value="detail",method=RequestMethod.GET) //也可直接使用 @GetMapping("detail")
public ModelAndView Info() {
return new ModelAndView("order/info", "message", "Info");
}

对于每种请求类型,SpringMVC还提供了专用的注解:

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping

@PatchMapping

通过params指定参数名或参数值约束

params属性可以限定请求参数包含特定的参数,也可限定参数值的约束,如下代码所示:

    // 示例5 params 限定参数包含orderNumber
@RequestMapping(value = "detail2", params = "orderNumber")
public ModelAndView Detail2(String orderNumber) {
return new ModelAndView("order/info", "message", orderNumber);
} // 示例6 params 限定参数值
@RequestMapping(value = "detail3", params = "orderNumber!=1222")
public ModelAndView Detail3(String orderNumber) {
return new ModelAndView("order/info", "message", orderNumber);
}

示例5限定请求参数必须包含参数orderNumber,如果不包含名为orderNumber的参数,则拒绝访问:访问路径:http://localhost:8080/springMvcNext/order/detail2?orderNumber=12

示例6限定请求参数必须包含参数orderNumber并且参数值不能为1222 访问路径:http://localhost:8080/springMvcNext/order/detail3?orderNumber=1222 时报错

通过headers指定参数名或参数值约束

RequestMapping提供的method属性可以指定请求头类型,只有请求数据头部类型符合指定的值时,才能正常访问

        // 示例7 params 限定参数值
@RequestMapping(value = "headtest",headers = "apikey=23131313")
//@RequestMapping(value = "headtest",headers= {"Accept=application/json"})
public ModelAndView Header() {
return new ModelAndView("order/info", "message", "Header");
}

示例7限定请求头必须包含apikey:23131313才可以正常返回,直接访问,返回错误:

添加添加header信息apikey:23131313访问成功:

通过consumes指定请求提交的内容类型(Content-Type)

    // 示例8 consumes
@RequestMapping(value = "consumes", method = RequestMethod.POST, consumes = "application/json")
public ModelAndView Consumes(String orderNumber) {
return new ModelAndView("order/info", "message", orderNumber);
}

示例限定请求参数类型为application/json,表示该方法只处理请求Content-Type为application/json的请求:

下面通过抛postman测试:

设置请求参数格式为application/json,可以正常访问:

设置参数格式为x-form-urlencoded,返回错误,Http Status 415

通过produces指定返回的内容类型(Content-Type)

produces属性用于设定返回内容类型,并且满足以下条件:接受请求header中包含Accept的值与produces设定的值相同,或者接受的请求使用不显示设置accept值

        // 示例8 produces 限定返回数据application/json
@RequestMapping(value = "produces", method = RequestMethod.GET, produces = "application/json")
public ModelAndView Produces(String orderNumber) {
return new ModelAndView("order/info", "message", orderNumber);
}

示例8 表示返回内容格式application/json ,当客户端设置的accept格式为text/json时,运行报错,Http status 406

当客户端设置的accept格式为application/json或者不设置accept值时,可以正常运行

Spring MVC温故而知新 – 请求映射RequestMapping的更多相关文章

  1. 0054 Spring MVC的@Controller和@RequestMapping注解

    @Controller注解 该注解用来指示一个类是一个控制器,在Spring的配置xml文件中开启注解扫描 <context:conponent-scan base-package=" ...

  2. spring MVC处理请求过程及配置详解

    本文主要梳理下Spring MVC处理http请求的过程,以及配置servlet及业务application需要的常用标签,及其包含的意义. spring MVC处理请求过程 首先看一个整体图 简单说 ...

  3. spring MVC处理请求过程

    spring MVC处理请求过程 首先看一个整体图 简单说下各步骤: handlerMapping handlerMapping将请求映射到处理器,即图中的HandlerExecutionChain. ...

  4. spring mvc get请求也可以接受DTO对象

    spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从ht ...

  5. Spring MVC 基础注解之@RequestMapping、@Controller、(二)

    我现在学的是spring4.2 今天主要学习了Spring MVC注解 引入注解可以减少我们的代码量,优化我们的代码. @Controller:用于标识是处理器类: @RequestMapping:请 ...

  6. Spring MVC温故而知新-从零开始

    Spring MVC简介 Spring MVC是一款基于MVC架构模式的轻量级Web框架,目的是将Web开发模块化,对整体架构进行解耦. Spring MVC有一下优点: 作为Spring框架的一部分 ...

  7. Spring MVC 之请求参数和路径变量

    请求参数和路径变量都可以用于发送值给服务器.二者都是URL的一部分.请求参数采用key=value形式,并用“&”分隔. 例如,下面的URL带有一个名为productId的请求参数,其值为3: ...

  8. Spring MVC http请求地址映射(三)

    Spring MVC框架通过扫描将带有@Controller的类中的@RequestMapping的方法进行映射,然后调用映射的方法处理请求,这个分发过程默认是由DispaterServlet处理的. ...

  9. Spring MVC温故而知新 – 参数绑定、转发与重定向、异常处理、拦截器

    请求参数绑定 当用户发送请求时,根据Spring MVC的请求处理流程,前端控制器会请求处理器映射器返回一个处理器,然后请求处理器适配器之心相应的处理器,此时处理器映射器会调用Spring Mvc 提 ...

随机推荐

  1. Linux之ulimit详解(整理)

    修改:一般可以通过ulimit命令或编辑/etc/security/limits.conf重新加载的方式使之生效通过ulimit比较直接,但只在当前的session有效,limits.conf中可以根 ...

  2. DB Query Analyzer 5.03 is distributed, EXCEL table name will be enclosed in square bracket

      DB Query Analyzer 5.03 is distributed, table name will be enclosed in square bracket automatically ...

  3. sxoi爆炸祭

    好吧,纯粹是去玩玩的,我这么一个弱省的蒟蒻,进队纯粹是开玩笑.... Day0 去五中试机,感觉电脑手感不错,打了半个线段树的板子才发现试机要在自己的电脑上试,然后我无奈的搬东西(从26号搬到2号), ...

  4. C++——虚函数问题小集

    学习C++ 不可避免地会遇到虚函数的问题,下面几个问题在学习初期或多或少会存在一些疑惑,所以便将其总结了下来. 1.为什么静态成员函数.构造函数不能定义为虚函数? 因为静态成员函数是一个大家共享的一个 ...

  5. xml与object 之间的ORM

    xml映射为object对象,同时object对象,以xml来表示: public class Tools { private static XmlNodeList SelectNodes(strin ...

  6. 深入浅出Java concurrent

    看   :http://www.blogjava.net/xylz/archive/2010/07/08/325587.html

  7. Jquery测试题

    一.Jquery测试题 下面哪种不是jquery的选择器?(单选) A.基本选择器 B.后代选择器 C.类选择器 D.进一步选择器 考点:jquery的选择器 (C) 当DOM加载完成后要执行的函数, ...

  8. ORACLE复杂查询之连接查询

    一.传统的连接查询 1.交叉连接:返回笛卡尔积 WHERE中限定查询条件,可以预先过滤掉掉不符合条件的记录,返回的只是两个表中剩余记录(符合条件的记录)的笛卡尔积. 2.内连接:参与连接的表地位平等, ...

  9. Spring温故而知新 - bean的装配

    Spring装配机制 Spring提供了三种主要的装配机制: 1:通过XML进行显示配置 2:通过Java代码显示配置 3:自动化装配 自动化装配 Spring中IOC容器分两个步骤来完成自动化装配: ...

  10. [转]用python 10min手写一个简易的实时内存监控系统

    简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...