当前位置: 首页 > news >正文

SpringMVC常用注解的用法

1、 @PathVariable 

当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
示例代码:
@Controller  
@RequestMapping("/owners/{ownerId}")  
public class RelativePathUriTemplateController {  
  
  @RequestMapping("/pets/{petId}")  
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      
    // implementation omitted   
  }  
}  

上面代码把URI template 中变量 ownerId的值和petId的值,绑定到方法的参数上。若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指定uri template中的名称。

2、 @RequestHeader、@CookieValue

@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。

示例代码:

这是一个Request 的header部分:

Host localhost:8080
Accept text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
@RequestMapping("/displayHeaderInfo.do")  
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,  
                              @RequestHeader("Keep-Alive") long keepAlive)  {  
}  

上面的代码,把request header部分的 Accept-Encoding的值,绑定到参数encoding上了, Keep-Alive header的值绑定到参数keepAlive上。

@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。

例如有如下Cookie值:

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
参数绑定的代码:

@RequestMapping("/displayHeaderInfo.do")  
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)  {  
}  

 


即把JSESSIONID的值绑定到参数cookie上。

3、@RequestParam, @RequestBody

@RequestParam
A) 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;
B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;

C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;
示例代码:

@Controller  
@RequestMapping("/pets")  
@SessionAttributes("pet")  
public class EditPetForm {  
    @RequestMapping(method = RequestMethod.GET)  
 public String setupForm(@RequestParam("petId") int petId, ModelMap model) {  
       Pet pet = this.clinic.loadPet(petId);  
   model.addAttribute("pet", pet);  
   return "petForm";  
   }  

@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverter api;

相关文章:

  • ionic ng-repeat 循环传值
  • Windows下xgboot安装
  • CentOS 6.3下nginx、php-fpm、drupal快速部署
  • Android ScrollView截图和图片保存到相册的方式
  • android显示png图片,原来透明的地方都变成黑色的了
  • UINavigation导航控制器的使用
  • C#学习基本概念之Tuple类(元组、重数)
  • LINUX用户、用户组及权限管理
  • js 键盘码对应表
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • MyBatis的关联关系 一对一 一对多 多对多
  • iOS—仿微信单击放大图片
  • 内核优化参数
  • webpack搭建前端一条龙服务
  • 敏捷开发Scrum
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 345-反转字符串中的元音字母
  • CSS3 变换
  • Golang-长连接-状态推送
  • JavaWeb(学习笔记二)
  • JS笔记四:作用域、变量(函数)提升
  • 官方解决所有 npm 全局安装权限问题
  • 简单实现一个textarea自适应高度
  • 聊聊sentinel的DegradeSlot
  • 山寨一个 Promise
  • 协程
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​linux启动进程的方式
  • ###C语言程序设计-----C语言学习(3)#
  • $(function(){})与(function($){....})(jQuery)的区别
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (zt)最盛行的警世狂言(爆笑)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二十三)Flask之高频面试点
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (五)Python 垃圾回收机制
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • *** 2003
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .Net 知识杂记
  • .net分布式压力测试工具(Beetle.DT)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @在php中起什么作用?
  • []Telit UC864E 拨号上网
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [AR]Vumark(下一代条形码)
  • [BT]BUUCTF刷题第9天(3.27)
  • [BUUCTF]-Reverse:reverse3解析
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [HAOI2016]食物链
  • [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信