Spring MVC温故而知新系列教程之请求映射RequestMapping注解

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注解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • spring springMVC中常用注解解析

    一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描.配置项就配置了对指定的包进行扫描,以实现依赖注入. <?xml version="1.0" encoding="UTF-8"?> <span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans&q

  • springmvc注解配置实现解析

    springmvc大大减少了对xml的配置,减少了配置量,以及可以在一个controller类中进行多个请求配置 一.springmvc配置 context:component-scan 开启包扫描,对指定的包进行注解扫描 mvc:annotation-driven开启注解功能 二.controller配置 在类上加上@Controller 在指定的方法上@RequestMapping("/t请求名") 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • SpringMVC中解决@ResponseBody注解返回中文乱码问题

    昨天在做项目的时候用@ResponseBody注解,发现返回页面上的中文是乱码,解决过程也是让我很郁闷!!!特此记录一些.目前有下面几种解决方案: @RequestMapping的produces方法 第一种解决方案是使用@RequestMapping注解的produces方法.写法如下: 复制代码 代码如下: @RequestMapping(value = "testPersonalValidtor.do",produces = "application/json;char

  • 聊聊springmvc中controller的方法的参数注解方式

    绪论 相信接触过springmvc的同学都知道,在springmvc的控制层中,我们在方法的参数中可以使用注解标识.比如下面例子: public Map<String, Object> login(@PathVariable("loginParams") String loginParams) @PathVariable注解就标识了这个参数是作为一个请求地址模板变量的(不清楚的同学可以先学习一下restful设计风格).这些注解都是spring内置注解,那么 我们可不可以自

  • SpringMVC使用@Valid注解进行数据验证的方法

    我们在做Form表单提交的时候,只在前端做数据校验是不够安全的,所以有时候我们需要在后端同样做数据的校验.好在SpringMVC在后台验证给我们提供了一个比较好的支持.那就是使用Valid接口的实现类做数据校验.在这之前我们先做一下准备的工作. 添加相关的Maven依赖 我们先把需要的jar包添加进来. <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api<

  • 详解SpringMVC注解@initbinder解决类型转换问题

    在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题. 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作. WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的

  • Spring MVC通过添加自定义注解格式化数据的方法

    springmvc 自定义注解 以及自定义注解的解析 一.自定义注解名字 @Target({ElementType.TYPE, ElementType.METHOD}) //类名或方法上 @Retention(RetentionPolicy.RUNTIME)//运行时 @component//自定义多个注解,且在一个类中添加两个或以上的,只需要加一个 否则会实例化多次. public @interface SocketMapping { String value() default ""

  • Spring MVC温故而知新系列教程之请求映射RequestMapping注解

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

  • Spring MVC温故而知新系列教程之从零开始

    Spring MVC简介 Spring MVC是一款基于MVC架构模式的轻量级Web框架,目的是将Web开发模块化,对整体架构进行解耦. Spring MVC有一下优点: 作为Spring框架的一部分,拥有Spring的优点(IOC,AOP等) 支持灵活的URL到页面控制器的映射 提供灵活的数据验证.格式化.数据绑定机制 支持RESTful风格 Spring MVC请求流程 Spring MVC框架的整体请求流程如下: 上图中涉及到Spring MVC的几个功能组件: 前端控制器(Dispatc

  • spring mvc配置bootstrap教程

    本文实例为大家分享了spring mvc配置bootstrap教程,供大家参考,具体内容如下 1.下载bootstrap 到下面的链接下载最新的 http://getbootstrap.com/,我下载的版本是bootstrap-3.3.7-dist 2.解压bootstrap-3.3.7-dist.zip,把整个文件夹copy到项目的中.我创建的是maven项目,我的bootstrap资源文件放在webapp\res文件夹下. bootstrap-3.3.7-dist本身没有包含jquery.

  • Spring Mvc中传递参数方法之url/requestMapping详解

    前言 相信大家在使用spring的项目中,前台传递参数到后台是经常遇到的事, 我们必须熟练掌握一些常用的参数传递方式和注解的使用,本文将给大家介绍关于Spring Mvc中传递参数方法之url/requestMapping的相关内容,分享出来供大家参考学习,话不多说,直接上正文. 方法如下 1. @requestMapping: 类级别和方法级别的注解, 指明前后台解析的路径. 有value属性(一个参数时默认)指定url路径解析,method属性指定提交方式(默认为get提交) @Reques

  • spring mvc中的@PathVariable获得请求url中的动态参数

    spring mvc中的@PathVariable是用来获得请求url中的动态参数的,十分方便,复习下: @Controller public class TestController { @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET) public String getLogin(@PathVariable("userId") String user

  • C#温故而知新系列教程之闭包

    闭包的由来 形成闭包有一些值得总结的非必要条件: 1.嵌套定义的函数. 2.匿名函数. 3.将函数作为参数或者返回值. 4.在.NET中,可以通过匿名委托形成闭包:函数可以作为参数传递,也可以作为返回值返回,或者作为函数变量.而在.NET中,这都可以通过委托来实现.这些是实现闭包的前提. 要说闭包的由来就不得不先说下函数式编程了.近几年函数式编程也是比较火热,我们先来看看函数式编程的一些基本的特性这个有助于我们理解闭包的由来.  函数式编程 函数式编程是一种编程模型,他将计算机运算看做是数学中函

  • 详解Http请求中Content-Type讲解以及在Spring MVC中的应用

    详解Http请求中Content-Type讲解以及在Spring MVC中的应用 引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在spring MVC中如何使用它们来映射请求信息. 1.  Content-Type MediaType,即是Internet Media Type,互联网媒体类型:也叫做MIME类型,在Http协议消息头中,

  • Spring MVC 基于URL的映射规则(注解版)

    好几天没有跟进Spring MVC的学习了,之前看了点源码都忘的差不多了.这次就跟着之前的问题,继续总结下Spring MVC中的小知识. url-pattern 如果看过前一篇入门的帖子,应该了解到spring mvc在启动前必须要在web.xml中配置servlet,这样才能拦截到想要映射的url地址. <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springfr

  • 基于Spring MVC 简介及入门小例子(推荐)

    一.什么是 Spring MVC Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面,是一个强大灵活的 Web 框架.Spring MVC 提供了一个 DispatcherServlet 作为前端控制器来分配请求.通过策略接口,Spring 框架是高度可配置的.Spring MVC 还包含多种视图技术,如 Java Server Pages(JSP).Velocity.Tiles.iText 和 POI 等.Spring MV

  • Spring MVC url提交参数和获取参数

    普通URL提交参数 该格式url为:url.do?param1=mahc&param2=8888.00 需要在上文中的HelloController对象添加方法如下: /** * Spring MVC URL提交参数 * @param name * @return */ @RequestMapping("/param") public ModelAndView getInfo(@RequestParam("name") String name){ Strin

随机推荐