全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

spring mvc常用注解_动力节点Java学院整理

Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam, @ModelAttribute等等这样类似的注解。到目前为止,Spring的版本虽然发生了很大的变化,但注解的特性却是一直延续下来,并不断扩展,让广大的开发人员的双手变的更轻松起来,这都离不开Annotation的强大作用,今天我们就一起来看看Spring MVC 4中常用的那些注解吧。

1. @Controller

Controller控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,将其转换成一个模型然后将试图呈献给用户。Spring MVC 使用 @Controller 定义控制器,它还允许自动检测定义在类路径下的组件并自动注册。如想自动检测生效,需在XML头文件下引入 spring-context:

 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
 
  <context:component-scan base-package="org.springframework.samples.petclinic.web"/>
 
  <!-- ... --></beans>

2. @RequestMapping

我们可以 @RequestMapping 注解将类似 “/favsoft”这样的URL映射到整个类或特定的处理方法上。一般来说,类级别的注解映射特定的请求路径到表单控制器上,而方法级别的注解只是映射为一个特定的HTTP方法请求(“GET”,“POST”等)或HTTP请求参数。

@Controller
@RequestMapping("/favsoft")
public class AnnotationController {
   
  @RequestMapping(method=RequestMethod.GET)
  public String get(){
    return "";
  }
   
  @RequestMapping(value="/getName", method = RequestMethod.GET)
  public String getName(String userName) {
    return userName;
  }
   
  @RequestMapping(value="/{day}", method=RequestMethod.GET)
  public String getDay(Date day){
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    return df.format(day);
  }
   
  @RequestMapping(value="/addUser", method=RequestMethod.GET)
  public String addFavUser(@Validated FavUser favUser,BindingResult result){
    if(result.hasErrors()){
      return "favUser";
    }
    //favUserService.addFavUser(favUser);
    return "redirect:/favlist";
  }
 
  @RequestMapping("/test")
  @ResponseBody
  public String test(){
    return "aa";
  }
   
}

@RequestMapping 既可以作用在类级别,也可以作用在方法级别。当它定义在类级别时,标明该控制器处理所有的请求都被映射到 /favsoft 路径下。@RequestMapping中可以使用 method 属性标记其所接受的方法类型,如果不指定方法类型的话,可以使用 HTTP GET/POST 方法请求数据,但是一旦指定方法类型,就只能使用该类型获取数据。

@RequestMapping 可以使用 @Validated与BindingResult联合验证输入的参数,在验证通过和失败的情况下,分别返回不同的视图。

@RequestMapping支持使用URI模板访问URL。URI模板像是URL模样的字符串,由一个或多个变量名字组成,当这些变量有值的时候,它就变成了URI。

3. @PathVariable

在Spring MVC中,可以使用 @PathVariable 注解方法参数并将其绑定到URI模板变量的值上。如下代码所示:

 String findOwner( String , Model model) {
  FavUser favUser = favUserService.findFavUser();
  model.addAttribute(
   ;
}

URI模板 “favusers/{favUserId}"指定变量的名字 favUserId ,当控制器处理这个请求的时候, favUserId的值会被设定到URI中。比如,当有一个像“favusers/favccxx”这样的请求时,favUserId的值就是 favccxx。

@PathVariable 可以有多个注解,像下面这样:

@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);
  Pet pet = owner.getPet(petId);
  model.addAttribute("pet", pet);  return "displayPet";
}

@PathVariable中的参数可以是任意的简单类型,如int, long, Date等等。Spring会自动将其转换成合适的类型或者抛出 TypeMismatchException异常。当然,我们也可以注册支持额外的数据类型。

如果@PathVariable使用Map<String, String>类型的参数时, Map会填充到所有的URI模板变量中。

@PathVariable支持使用正则表达式,这就决定了它的超强大属性,它能在路径模板中使用占位符,可以设定特定的前缀匹配,后缀匹配等自定义格式。 

@PathVariable还支持矩阵变量,因为现实场景中用的不多,这就不详细介绍了,有需要的童鞋请查看官网的文档。

4. @RequestParam

@RequestParam将请求的参数绑定到方法中的参数上,如下面的代码所示。其实,即使不配置该参数,注解也会默认使用该参数。如果想自定义指定参数的话,如果将@RequestParam的 required 属性设置为false(如@RequestParam(value="id",required=false))。

5. @RequestBody

@RequestBody是指方法参数应该被绑定到HTTP请求Body上。

@RequestMapping(value = "/something", method = RequestMethod.PUT)public void handle(@RequestBody String body, Writer writer) throws IOException {
  writer.write(body);
}

如果觉得@RequestBody不如@RequestParam趁手,我们可以使用 HttpMessageConverter将request的body转移到方法参数上, HttMessageConverser将 HTTP请求消息在Object对象之间互相转换,但一般情况下不会这么做。事实证明,@RequestBody在构建REST架构时,比@RequestParam有着更大的优势。

6. @ResponseBody

@ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTP response body中。@ResponseBody在输出JSON格式的数据时,会经常用到,代码见下图:

@RequestMapping(value = "/something", method = RequestMethod.PUT)@ResponseBodypublic String helloWorld() {  return "Hello World";
}

7. @RestController

我们经常见到一些控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@RequestMapping与@ResponseBody。

@RestController
public class FavRestfulController {
 
@RequestMapping(value="/getUserName",method=RequestMethod.POST)
public String getUserName(@RequestParam(value="name") String name){
return name;
}
}

8. HttpEntity

HttpEntity除了能获得request请求和response响应之外,它还能访问请求和响应头,如下所示:

@RequestMapping("/something")public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException {
  String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader"));  byte[] requestBody = requestEntity.getBody();  // do something with request header and body

  HttpHeaders responseHeaders = new HttpHeaders();
  responseHeaders.set("MyResponseHeader", "MyValue");  return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

9. @ModelAttribute

@ModelAttribute可以作用在方法或方法参数上,当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)。该方法支持与@RequestMapping一样的参数类型,但并不能直接映射成请求。控制器中的@ModelAttribute方法会在@RequestMapping方法调用之前而调用,示例如下:

@ModelAttribute
public Account addAccount(@RequestParam String number) {
  return accountManager.findAccount(number);
}

@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
  model.addAttribute(accountManager.findAccount(number));  
  // add more ...
}

@ModelAttribute方法用来在model中填充属性,如填充下拉列表、宠物类型或检索一个命令对象比如账户(用来在HTML表单上呈现数据)。

@ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。

@ModelAttribute作用在方法参数上

当@ModelAttribute作用在方法参数上时,表明该参数可以在方法模型中检索到。如果该参数不在当前模型中,该参数先被实例化然后添加到模型中。一旦模型中有了该参数,该参数的字段应该填充所有请求参数匹配的名称中。这是Spring MVC中重要的数据绑定机制,它省去了单独解析每个表单字段的时间。

@ModelAttribute是一种很常见的从数据库中检索属性的方法,它通过@SessionAttributes使用request请求存储。在一些情况下,可以很方便的通过URI模板变量和类型转换器检索属性。


# spring  # mvc常用注解  # springmvc注解  # SpringMVC结构简介及常用注解汇总  # 详解SpringMVC Controller介绍及常用注解  # springmvc常用注解标签详解  # SpringMVC中常用注解与使用方法详解  # 详解springmvc常用5种注解  # 详解SpringMVC常用注解功能及属性  # 可以使用  # 用在  # 多个  # 绑定  # 自定义  # 所示  # 表单  # 将其  # 这就  # 转换成  # 上时  # 当它  # 自己的  # 这是  # 情况下  # 是一种  # 也会  # 却是  # 还能  # 是指 


相关文章: 如何快速生成橙子建站落地页链接?  如何零成本快速生成个人自助网站?  如何在IIS7上新建站点并设置安全权限?  Python如何创建带属性的XML节点  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何在云虚拟主机上快速搭建个人网站?  ,有什么在线背英语单词效率比较高的网站?  建站之星北京办公室:智能建站系统与小程序生成方案解析  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何用腾讯建站主机快速创建免费网站?  微课制作网站有哪些,微课网怎么进?  建站之星展会模板:智能建站与自助搭建高效解决方案  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  红河网站制作公司,红河事业单位身份证如何上传?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  内部网站制作流程,如何建立公司内部网站?  如何通过网站建站时间优化SEO与用户体验?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  免费网站制作appp,免费制作app哪个平台好?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何做静态网页,sublimetext3.0制作静态网页?  利用JavaScript实现拖拽改变元素大小  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何在云主机快速搭建网站站点?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何通过FTP服务器快速搭建网站?  免费视频制作网站,更新又快又好的免费电影网站?  建站之星客服服务时间及联系方式如何?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  制作销售网站教学视频,销售网站有哪些?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  北京制作网站的公司,北京铁路集团官方网站?  网站制作企业,网站的banner和导航栏是指什么?  如何在VPS电脑上快速搭建网站?  定制建站如何定义?其核心优势是什么?  建站VPS选购需注意哪些关键参数?  C#怎么创建控制台应用 C# Console App项目创建方法  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  建站之星2.7模板快速切换与批量管理功能操作指南  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  活动邀请函制作网站有哪些,活动邀请函文案?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何快速生成专业多端适配建站电话?  网站制作难吗安全吗,做一个网站需要多久时间?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  网站设计制作企业有哪些,抖音官网主页怎么设置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。