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常用注解功能及属性
# 可以使用
# 用在
# 多个
# 绑定
# 自定义
# 所示
# 表单
# 将其
# 这就
# 转换成
# 上时
# 当它
# 自己的
# 这是
# 情况下
# 是一种
# 也会
# 却是
# 还能
# 是指
相关文章:
如何通过智能用户系统一键生成高效建站方案?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
建站之星ASP如何实现CMS高效搭建与安全管理?
C++如何编写函数模板?(泛型编程入门)
建站168自助建站系统:快速模板定制与SEO优化指南
北京网站制作网页,网站升级改版需要多久?
建站主机与虚拟主机有何区别?如何选择最优方案?
,sp开头的版面叫什么?
建站主机空间推荐 高性价比配置与快速部署方案解析
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何在万网自助建站中设置域名及备案?
如何用狗爹虚拟主机快速搭建网站?
建站之星安装后如何配置SEO及设计样式?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
金*站制作公司有哪些,金华教育集团官网?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何挑选高效建站主机与优质域名?
制作公司内部网站有哪些,内网如何建网站?
建站之星上传入口如何快速找到?
高性价比服务器租赁——企业级配置与24小时运维服务
孙琪峥织梦建站教程如何优化数据库安全?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
建站之星安装失败:服务器环境不兼容?
模具网站制作流程,如何找模具客户?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
建站主机CVM配置优化、SEO策略与性能提升指南
h5在线制作网站电脑版下载,h5网页制作软件?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
网站制作公司,橙子建站是合法的吗?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何选择高效便捷的WAP商城建站系统?
javascript中对象的定义、使用以及对象和原型链操作小结
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
想学网站制作怎么学,建立一个网站要花费多少?
实现虚拟支付需哪些建站技术支撑?
大连网站制作公司哪家好一点,大连买房网站哪个好?
存储型VPS适合搭建中小型网站吗?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
网站按钮制作软件,如何实现网页中按钮的自动点击?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何用PHP工具快速搭建高效网站?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何高效利用200m空间完成建站?
如何通过免费商城建站系统源码自定义网站主题与功能?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何通过多用户协作模板快速搭建高效企业网站?
制作营销网站公司,淘特是干什么用的?
个人网站制作流程图片大全,个人网站如何注销?
建站主机选购指南:核心配置优化与品牌推荐方案
建站之星代理如何优化在线客服效率?
*请认真填写需求信息,我们会在24小时内与您取得联系。