SpringMVC之常用注解详解

SpringMVC之注解详解

一 使用@RequestMapping映射请求

1 @RequestMapping解读

(1) Spring MVC 使用 @RequestMapping 注解为控制器指定可• 以处理哪些 URL 请求
(2) 在控制器的类定义及方法定义处都可标注@RequestMapping
类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若– 类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录
(3) DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理 方法。

2 映射请求参数、请求方法或请求头

(1)标准的HTTP请求报头
在这里插入图片描述
(2)@RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求
(3)@RequestMapping 的 value、method、params 及 heads • 分别表示请求 URL、请求方法、请求参数及请求头的映射条 件,他们之间是与的关系,联合使用多个条件可让请求映射 更加精确化
(4)params 和 headers支持简单的表达式:
param1: 表示请求必须包含名为 param1 的请求参数
!param1: 表示请求不能包含名为 param1 的请求参数
param1 != value1: 表示请求包含名为 param1 的请求参数,但其值– 不能为 value1
{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
例如
在这里插入图片描述

3 支持Ant风格

(1)Ant风格资源地址支持3种匹配符
① ?:匹配文件名中的一个字符
② 一个*:匹配文件名中的任意字符
③两个 “*”:匹配多层路径
(2)Ant风格的URL
① /user/星/createUser:匹配/user/aa/createUser等
② /user/**/createUser:匹配/user/aa/bbb/createUser等
③ /user/createUser??:匹配/user/aa/createUseraa等

二 使用@PathVariable映射URl绑定的占位符

带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的 意义

说明:
通过 @PathVariable 可以将 URL 中占位符参数绑定到控• 制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx”) 绑定到操作方法的入参中
例如:

在这里插入图片描述

三 映射请求参数

1 请求处理方法签名

(1)Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应入参中。
(2)Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名, 必要时可以对方法及方法入参标注相应的注解( •@PathVariable 、@RequestParam、@RequestHeader 等)、Spring MVC 框架会将 HTTP 请求的信息绑定到相应的方法入参 中,并根据方法的返回值类型做出相应的后续处理。

2 使用@RequestParam 绑定请求参数

在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
① value:参数名
② required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
在这里插入图片描述

3 使用 @RequestHeader 绑定请求报头的属性值

说明:
请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参
在这里插入图片描述

4 使用 @CookieValue 绑定请求中的 Cookie值

@CookieValue 可让处理方法入参绑定某个 Cookie 值
在这里插入图片描述

5 使用POJO对象绑定请求参数

Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。 如:dept.deptId、dept.address.tel 等
在这里插入图片描述

6 使用Servlet API作为入参

使用Servlet API作为入参:如HttpServletRequest、HttpServletResponse、HttpSession、Locale、InputStream、OutputStream、Reder、Writer、java.security.Principal等
在这里插入图片描述

四 处理数据模型

Spring MVC 提供了以下几种途径输出模型数据:
(1) ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据
(2)Map 及 Model: 入参为org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中。
(3)@SessionAttributes: 将模型中的某个属性暂存到 HttpSession 中,以便多个请求之间可以共享这个属性
(4) @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中

1 ModeAndView

(1)控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息
(2) 添加模型数据方法
① MoelAndView addObject(String attributeName, Object attributeValue)添加一个模型数据
② ModelAndView addAllObject(Map<String, ?> modelMap)添加多个模型数据
(3)设置视图方法
① void setView(View view)设置视图
② void setViewName(String viewName)设置视图名

2 Map和Model

Spring MVC 在内部使用了一个 org.springframework.ui.Model 接口 储模型数据
(1)具体步骤
① Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器
② 如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传 递给这些入参。在方法体内,开发者可以 通过这个入参对象访问到模型中的所有数 据,也可以向模型中添加新的属性数据
结构图如下:
在这里插入图片描述
(2)案例
在这里插入图片描述

3 使用@SessionAttrbutes

(1)若希望在多个请求之间共用某个模型属性数据,则可以在 控制器类上标注一个 @SessionAttributes, Spring MVC 将在模型中对应的属性暂存到 HttpSession 中。
(2) @SessionAttributes 除了可以通过属性名指定需要放到会•话中的属性外,还可以通过模型属性的对象类型指定哪些 模型属性需要放到会话中
例如
① @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
② @SessionAttributes(value={“user1”,“user2”})
③ @SessionAttributes(types={User.class, Dept.class})
④ @SessionAttributes(value={“user1”, “user2”}, types={Dept.class})
(3)案例
在这里插入图片描述
(4)由@SessionAttributes引发的异常
① 异常截图
在这里插入图片描述
② 异常分析
在这里插入图片描述
如果在处理类定义处标注了@SessionAttributes(“xxx”),则尝试从会话中获取该属性,并将其赋给该入参,然后再用 请求消息填充该入参对象。如果在会话中找不到对应的属 性,则抛出 HttpSessionRequiredException 异常
③ 避免办法
在这里插入图片描述

4 使用@ModelAttrbute

(1)在方法定义上使用 @ModelAttribute 注解:Spring MVC •在调用目标处理方法前,会先逐个调用在方法级上标注了
(2)在方法的
入参前使用** @ModelAttribute 注解:
① 可以从隐含对象中获取隐含的模型数据中的对象,再将请求参数绑定到对象中,再传入入参
② 将方法入参对象添加到模型中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值