@TOC


介绍

在Spring MVC项目中,<\context:component-scan>配置标签还会开启@Request-Mapping、@GetMapping等映射注解功能(也就是会注册RequestMappingHandler-Mapping和RequestMappingHandlerAdapter等请求映射和处理等组件),但是< context:component-scan>不支持数据转换或验证等注解功能。 Spring MVC提供了<\mvc:annotation-driven/>配置标签用于全面开启MVC相关的注解功能,该配置会注册用于处理请求映射相关的组件,支持请求注解映射注解(@Request-Mapping、@GetMapping和@PostMapping等)和参数转换注解(@RequestParam、@PathVariable和@ModelAttribute等)。
注册的组件类型包括:
·RequestMappingHandlerMapping:请求映射处理器映射器; ·RequestMappingHandlerAdapter:请求映射处理器适配器; ·ExceptionHandlerExceptionResolver:处理异常信息的异常解析器。
除此之外,< mvc:annotation-driven/>配置还会加载一些数据转换支持的注解实现类,包括:
·支持使用了ConversionService的实例对表单参数进行类型转换;
·支持使用@NumberFormat、@NumberFormat注解的作用是对数据类型进行格式化
·支持使用@Valid对JavaBean进行JSR-303验证;
·支持JSON数据类型转换注解@RequestBody和@ResponseBody。

组件注解

与Spring核心容器一致,配置< context:component-scan>就可以自动扫描和注册对应包下的组件和依赖注入的注解。相比@Component的通用组件注解,Spring MVC项目中可以使用对应不同层级更为精确的组件注解,具体使用如下: ·@Controller:控制器组件;
·@Service:服务组件;
·@Repository:DAO组件;
·@Component:组件的泛型,使用于不好归类的组件类,如一些用于和配置文件对应的类。

请求映射与参数注解

请求映射注解可以使用在类和方法上,基本的注解是@RequestMapping,根据不同的请求类型有不同的子注解,类似@GetMapping、@PostMapping,特定请求注解只接受特定类型的HTTP请求方法,而@RequestMapping可以通用。
参数注解包括请求参数
@RequestParam和路径变量
@PathVariable等。
@RequestMapping:请求映射注解 @RequestMapping可以使用在@Controller注解类的类和方法中。应用在类中作为请求路径的前缀,结合方法中的路径组成完整的请求路径.

@RequestMapping后面可以直接指定路径,也可以使用value属性来指定路径。@RequestMapping是一个通用类型的请求映射,可以对应不同类 型的请求(Spring中使用RequestMethod枚举类维护请求类型),包括GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS和TRACE。method属性用于指定匹配不同类型的请求,例如: @RequestMapping(value="/helloWithParamObject",method=RequestMethod.GET)
等同于
@GetMapping (value="/helloWithParamObject")

Spring MVC提供了不同类型的子注解可以直接使用,包括@GetMapping、@Post-Mapping、@PutMapping、@DeleteMapping和@PatchMapping。

请求内容的类型配置

在请求映射注解中,可以通过consumes和produces属性指定请求和返回的媒体格式类型。
·consumes:处理请求的提交内容类型(Content-Type),例如application/json、text/html。使用此属性可以缩小请求映射的范围。consumes也支持反向表达,比如!text/plain,指除text/plain以外的任何内容类型。
·produces:返回的内容类型
设置@RequestMapping等注解的headers属性,可以限定映射包含此请求头参数的请求,缩小映射方法的映射范围。

@RequestParam

@RequestParam使用在映射方法的形参中,用来匹配一些简单类型和没有被其他参数解析器解析的请求参数。默认情况下,请求参数与映射方法参数需要同名,如果在请求参数或请求体中不存在同名的参数,则会出错。也就是说,默认@RequestParam注解的参数是必须传值的,否则会抛出异常,请求处理的方法也不会执行。可以通过设置required属性为false取消这个限制,还可以通过value属性设置映射到的前端请求的参数名。例如:

  @RequestMapping("/helloWithParam")                                  //映射注解public ModelAndView helloWithParam(@RequestParam(value="userName",required=true) String userName) { //value指定前端请求参数名,required必须检查ModelAndView modelAndView = new ModelAndView();  //模型视图对象初始化modelAndView.setViewName("hello");                               //设置视图名return modelAndView;                                                             //返回视图模型对象}

请求参数可以通过GET方式直接在URL中传入,也可以通过POST方式传入。GET在URL中传递的示例如
下: /anno-demo/helloWithParam?userName=Oscar
注意:required不设置,默认参数是必须传值的,所以一般参数非必须时才进行required=false的设置。 映射方法参数的@RequestParam也可以不使用,容器会根据参数名称自动进行匹配。如果方法参数是一个对象类型的话,容器还会将请求中的参数自动装箱,也就是创建该类型的对象,并将前端传递的参数自动匹配到对象的属性中。举例来看注解方法的定义如下:

 @RequestMapping("/helloWithParamObject")                    //映射注解//User类型对象的参数自动装箱ublic ModelAndView helloWithParamObject(User user) {}//方法体略

在使用地址/anno-demo/helloWithParamObject?name=Oscar请求时,映射方法的User类型的参数对象会被创建,并且会把前端的name值设置给对象。

路径变量注解:@PathVariable

@PathVariable注解使用在映射方法参数中,用来绑定映射注解中的URL占位符的值并赋给该参数,占位符使用{}的格式。示例如下:

 //包含占位符的映射配置@RequestMapping(value="/helloPathVariable/{userName}")//参数路径映射public ModelAndView helloPathVariable(@PathVariable String userName) { //方法体略}

当使用/helloPathVariable/user1进行请求访问时,会将路径中的user1的值绑定给上面方法中的参数。
@PathVariable和@RequestParam都是用来传递参数的,@PathVariable常用在REST风格请求的服务中。

矩阵变量注解:@MatrixVariable

在使用@PathVariable注解映射路径变量时,可以结合@MatrixVariable注解在请求URL路径中附加键值对方式的参数传递,路径和参数以分号(;)分隔,参数的键和值以等号(=)分隔。例如,请求路径是/helloMartrixVariable/user1;id=1,这里的user1是路径,id是键值对的参数。在映射方法中的写法如下:
//包含路径占位符的映射注解

@RequestMapping(value="/helloMartrixVariable/{userName}")public ModelAndView helloMartrixVariable(    // 映射方法@PathVariable String userName,           //路径占位符匹配//矩阵变量匹配@MatrixVariable(name="id", pathVar="userName") String userId) {System.out.println("PathVariable userName:"+userName);  //user1
System.out.println("MartrixVariable userId:"+userId);   //ModelAndView modelAndView = new ModelAndView(); return modelAndView;}

@MatrixVariable注解的name属性指定参数的键的名字,pathVar指定路径变量的名字,在包含多个路径变量时需要使用。如果参数的键和方法的@MatrixVariable注解变量同名且只有一个路径变量时,可以省略name和pathVar属性的配置。 同一个路径地址,可以包含多个路径变量。在同一个路径变量中,可以包含多个键值对的参数,以分号(;)分割。@MatrixVariable注解的方法参数可以得到所有的矩阵变量,键值相同的会合并成集合。如果不同路径变量中都包含同一个键值,在不使用pathVar指定具体哪个路径变量的状况下,返回的键值是一个集合。以某个映射注解的路径配置为例: /depts/{deptId}/users/{userId}
该路径有两个路径占位符,使用矩阵变量的请求路径如下:
/depts/dept001;att1=value1/users/user001;att1=value11;att2=value2
使用MultiValueMap<String,String>类型的参数可以匹配所有的矩阵变量,如果指定@MatrixVariable注解的pathVar属性,则会返回该路径变量的所有矩阵变量,示例如下:

   @RequestMapping(value="/depts/{deptId}/users/{userId}")public ModelAndView helloMultiMartrixVariable(@MatrixVariable MultiValueMap<String,String>matrixVars,@MatrixVariable(pathVar="userId")  MultiValueMap<String, String>userAtts) {// matrixVars匹配的值是  {att1=[value1,value11], att2=[value2]}// userAtts匹配的值是  {att1=[value11], att2=[value2]}ModelAndView modelAndView = new ModelAndView();return modelAndView;}

【spring学习笔记】(二)Spring MVC注解配置 参数转换注解@RequestMapping@RequestParam、@PathVariable@MatrixVariable相关推荐

  1. Spring学习笔记 之 Spring<全>

    开始学习Spring全家桶 文章目录 1. IoC 定义 为什么叫控制反转? 实现 IoC 容器创建 bean 的两种⽅式 IoC DI 特殊字符的处理 Spring 中的bean创建类型 -- sc ...

  2. spring学习笔记(spring概述和IOC)

    spring5 1.spring的概述 1.1.spring是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的. Spring 的 ...

  3. Spring 学习之 二----Spring创建对象的三种方式

    最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...

  4. Spring学习笔记之Spring Web Flow

    Spring Web Flow 是Spring MVC 的扩展,它支持开发基于流程的应用程序.它将流程的定义与实现流程行为的类和视图分离开来. 1.配置Web Flow 在Spring MVC上下文定 ...

  5. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)

    http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...

  6. springAop学习笔记(二,springboot进本配置和使用)

    配置 1.引入aop jar包 2.在主类上面加@EnableAspectJAutoProxy 这里要说一句:市面上常用有两种aop实现方式第一种是springaop,第二种是AspectJ,但是原始 ...

  7. spring学习笔记 -- day02 spring基础、IOC控制反转

    一:srping的介绍 1.spring的体系结构 2.spring资源 a.spring-framework-4.2.4.RELEASE:Spring Framework的官方发行包 b.sprin ...

  8. ES学习笔记(二):集群配置与启动 --mac环境

    1 环境准备: 复制原有es文件,分别为三个文件夹:Node-8001,Node-8002,Node-8003 删除三个文件夹中的data文件,清除log文件 修改配置文件 1.1修改配置文件 配置文 ...

  9. Spring框架学习笔记07:基于XML配置方式使用Spring MVC

    文章目录 一.Spring MVC概述 1.MVC架构 2.Spring MVC 3.使用Spring MVC的两种方式 二.基于XML配置与注解的方式使用Spring MVC (一)创建Spring ...

最新文章

  1. sew 31系列服务器报警12,SEW变频器MOVITRAC-31C系列故障代码表
  2. springboot mybatis 项目框架源码 shiro 集成代码生成器 ehcache缓存
  3. java自定义字段_java-使用自定义字段构造函数将HTML属性添加...
  4. 机房布线的最高境界 | 最后的暗黑系,真是亮瞎眼 ​
  5. 计算机仿真电路实验感想,电路计算机仿真 实验报告.doc
  6. javascript HTML静态页面传值的四种方法
  7. [转]自定义UITableView各种函数
  8. openjudge 7622 求排列的逆序数(归并)
  9. sql-插入当前时间
  10. 标段模板、审批流程模板
  11. 【IoT】 产品设计:结构设计之PCB板框图设计
  12. MySQL基本架构示意图
  13. ODI升级连接mysql数据库的驱动
  14. 【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明
  15. office2020与2016版的不同_office2016与2019有什么区别_office2016与2019的区别详细说明...
  16. 7K7K小游戏《黑客是怎样炼成的》攻略
  17. 哪些seo搜索技巧你不会用?
  18. RaSa2.5.x利用Fallback处理超出范围的消息
  19. 抖音快手短视频如何用python程序高效的自动化剪辑?
  20. 超像素分割算法————综述

热门文章

  1. python对象group函数_如何对groupby对象应用多个函数
  2. 乐理 music theory
  3. 语言怎么绘画人物肖像_坦培拉绘画技法——油画简史
  4. python支持什么操作方式_python模拟点击常用的操作方法有哪些?
  5. python脚本自动运行失败_解决Python中定时任务线程无法自动退出的问题
  6. idea设置scanner = new Scanner(System.in);的实时模板
  7. 电路板必须用c语言编程吗,上大学才知道绿油油的板子叫PCB,如何成为一名电子工程师...
  8. linux界面添加地址,Linux系统下图形界面更改IP地址
  9. 六十四、Vue项目去哪儿网App开发准备
  10. 五、Requests库详细的用法