Spring MVC 常用注解
Spring MVC 常用注解
@RequestMapping注解
这个注解类型指示Spring用哪一个类或方法来处理请求动作,该注解可以用于类或方法;
@RequestMapping注解支持的属性
- value属性
这个属性将URL映射到方法上,由于value属性是@RequestMapping注解的默认属性,因此如果只有唯一属性,则可以省略属性名;即如下两个标注含义相同:
@RequestMapping("value="/hello")
@RequestMapping("/hello")
但如果超过一个属性,就必须写上value属性名称
- method属性
该属性用来指示该方法仅仅处理哪些HTTP请求方式,如果没有指定method属性值,则请求处理方法可以处理任意的HTTP请求方式。
- consumes 属性
该属性指定处理请求的提交内容类型(Content-Type)
@RequestMapping(value="/hello",method=RequestMethod.POST, consumes="application/json")
表示方法仅处理request Content-Type 为"application/json"类型的请求。
- produces属性
该属性指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型。
@RequestMapping(value="/hello",method=RequestMethod.POST, produces="application/json")
方法仅处理request请求中Accept头中包含了"application/json"的请求,同时指明了返回的内容类型为application/json。
- params属性
该属性指定request中必须包含某些参数值时,才让该方法处理。
@RequestMapping(value="/hello",method=RequestMethod.POST, params="myparam=myvalue")
方法仅处理其中名为"myparam"、值为"myvalue"的请求。
- headers属性
该属性指定request中必须包含某些指定的header值,才能让该方法处理请求。
@RequestMapping(value="/hello",method=RequestMethod.POST, headers="Referer=http://www.ccgogoing.github.io")
方法仅处理request的header中包含了指定'Referer'请求头和对应值为"http://www.ccgogoing.github.io"的请求。
Model和ModelMap
Spring MVC在内部使用了一个org.springframework.ui.Model接口存储模型数据,它的功能类似java.util.Map接口,但是比Map易于使用。org.springframework.ui.ModelMap接口实现了Map接口。
Spring MVC在调用处理方法之前会创建一个隐含的模型对象,作为模型数据的存储容器。如果处理方法的参数为Model或ModelMap类型,则Spring MVC会将隐含模型的引用传递给这些参数。在处理方法内部,开发者就可以通过这个参数对象访问模型中的所有数据,也可以向模型中添加新的属性数据。
在处理方法中,Model和ModelMap对象都可以使用如下方法添加模型数据:
addObject(String attributeName,Object attributeValue)
@RequestParam
org.springframework.web.bind.annotation.RequestParam 注解类型用于将指定的请求参数赋值给方法中的形参。
使用@RequestParam 注解可指定如下表所示的属性:
属性 | 类型 | 是否必要 | 是否说明 |
---|---|---|---|
name | String | 否 | 指定请求头绑定的名称 |
value | String | 否 | name属性的别名 |
required | boolean | 否 | 指定参数是否必须绑定 |
defaultValue | String | 否 | 如果没有传递参数而使用的默认值 |
@PathVariable注解
org.springframework.web.bind.annotation.PathVariale 注解类型可以非常方便地获得请求URL中的动态参数。@PathVariable注解只支持一个属性value,类型为String,表示绑定的名称,如果省略则默认绑定同名参数.示例代码如下:
@RequestMapping(value="/pathVariableTest/{userId}")
public void pathVariableTest(@PathVariable Integer userId)
URL模版变量{userId}绑定到通过@PathVariable注解的同名参数上
@ReuqestHeader注解
org.springframework.web.bind.annotation.RequestHeader注解类型用于将请求的头信息区数据映射到功能处理方法的参数上。
@CookieValue注解
org.springframework.web.bind.annotation.CookieValue用于将请求的Cookie数据映射到功能处理方法的参数上。
@SessionAttributes注解
org.spingframework.web.bind.annotation.SessionAttribute注解类型允许我们有选择地指定Model中的哪些属性需要转存到HttpSession对象当中。
属性 | 类型 | 是否必要 | 是否说明 |
---|---|---|---|
names | String[] | 否 | Model中属性的名称,即存储在HttpSession当中的属性名称 |
value | String[] | 否 | names属性的别名 |
types | Class<?>[] | 否 | 指定放入对象的类型 |
@SessionAttributes 只能声明在类上,而不能声明在方法上。
使用方法如下:
// 将Model中的属性名为user的属性放入HttpSession对象当中
@SessionAttributes("user")
@SessionAttributes(types={User.class},value="user")
// 也可以设置多个对象到HttpSession当中:
@SessionAttributes(types={User.class,Dept.class},value={"user","dept"})
types属性用来指定放入HttpSession当中的对象类型。
信息转换
HttpMessageConverter< T >接口
HttpMessageConverter< T >是Spring3.0之后新增的一个重要接口,它负责将请求信息转换为一个对象(类型为T),并将对象(类型为T)绑定到请求方法的参数中或输出为响应信息。
DispatcherServlet默认已经装配了RequestMappingHandlerAdapter作为HandlerAdapter组件的实现类,即HttpMessageConverter
由RequestMappingHandlerAdapter
使用,将请求信息转换为对象,或将对象转换为响应信息。
HttpMessageConverter< T >接口中定义了以下几个方法:
- boolean canRead(Class< ? > clazz,MediaType mediaType)。该方法指定转换器可以读取的对象类型,即转换器可将请求信息转换为clazz类型的对象,同时指定支持的MIME类型(text/html、application/json等)。MIME媒体类型在RFC2616中定义,具体请参考https://tools.ietf.org/html/rfc2616#section-3.7
- boolean canWrite(Class< ? >clazz, MediaType mediaType)。该方法指定转换器可以将clazz类型的对象写到响应流当中,响应流支持的媒体类型在mediaType中定义。
- List<MediaType> getSupportedMediaTypes()。该方法返回当前转换器支持的媒体类型。
- T read(Class< ? extends T> clazz,HttpInputMessage inputMessage)。该方法将请求信息流转换为T类型的对象。
- void write (T t,MediaType contentType,HttpOutputMessage outMessage)。该方法将T类型的对象写到响应流当中,同时指定响应的媒体类型为contentType。
Spring为HttpMessageConverter< T> 提供了多个实现类,这些实现类组成了一个功能强大、用途广泛的信息转换家族:
StringHttpMessageConverter
。 将请求信息转换为字符串。泛型T为String类型,可以读取所有媒体类型( /)的请求信息,可通过设置supportedMediaTypes属性指定媒体类型。响应信息的媒体类型为text/plain(即Content-Type的值)。FormHttpMessageConverter
。 将表单数据读取到MultiValueMap中。泛型T为org.springframework.util.MultiValueMap< String,? >类型,支持读取application/x-www-form-urlencoded的类型,但不支持读取multipart/form-data的类型。可以写application/x-www-form-urlencoded及multipart/form-data类型的响应信息。XmlAwareFormHttpMessageConverter
。继承自FormHttpMessageConverter,如果部分表单属性是XML数据,则可以用该转换器进行转换。ResourceHttpMessageConverter
。读写org.springframework.core.io.Resource
对象。泛型T为org.springframework.core.io.Resource对象,可以读取所有媒体类型( /)的请求信息。如果类路径下提供了JAF(Java Activation Framework),则根据Resource的类型指定响应的类型,否则响应的类型为application/octet-stream
。BufferedImageHttpMessageConverter
。读写BufferedImage对象。泛型T为BufferedImage对象,可以读取所有类型( /)的请求信息,返回BufferedImage相应的类型,也可以通过contentType显示指定。ByteArrayHttpMessageConverter
。读写二进制数据。泛型T为byte[]类型,可以读取所有类型( /)的请求信息,可以设置supportMediaTypes属性指定类型,响应信息的媒体类型为application/octet-stream。SourceHttpMessageConverter
。读写javax.xml.transform.Source类型的数据。泛型T为javax.xml.transform.Source
类型及其扩展类,包括javax.xml.transform.dom.DOMSource
、javax.xml.transform.sax.SAXSource
、javax.xml.transform.stream.StreamSource
,可以读取text/xml和application/xml类型请求,响应信息的类型为text/xml和application/xml。MarshallingHttpMessageConverter
。通过Spring 的 org.springframework.oxm.Marshalling(将Java对象转换成XML)和 Unmarshaller(将XML解析为Java对象)读写XML消息。泛型T为Object类型,可以读取text/xml和application/xml类型请求,响应消息的类型为text/xml和application/xml。Jaxb2RootElementHttpMessageConverter
。通过JAXB2读写XML消息,将请求消息转换到注解XmlRootElement和XmlType作用的类中。泛型T为Object类型,可以读取text/xml和application/xml类型的请求,响应消息的类型为text/xml和application/xml。MappingJackson2HttpMessageConverter
。利用Jackson开源类包读写JSON数据。泛型T为Object类型,可以读取application/json类型数据,响应信息的类型为application/jspon。
RequestMappingHandlerAdapter默认已经装配了以下的HttpMessageConverter:
- StringHttpMessageConverter
- ByteArrayHttpMessageConverter
- SourceHttpMessageConverter
- XmlAwareFormHttpMessageConverter
如果需要装配其他类型的HttpMessageConverter,则可以再Spring的Web容器的上下文中自行定义一个RequestMappingHandlerAdapter,如下所示:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.StringHttpMessageConverter"/><bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/><bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/><bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/></list></property></bean>
注意:如果Spring Web容器中显示定义了一个RequestMappingHandlerAdapter,则Spring MVC 的RequestMappingHandlerAdapter默认装配的HttpMessageConverter将不再起作用。
转换JSON 数据
Spring MVC提供了处理JSON格式请求/响应的HttpMessageConverter:
MappingJackson2HttpMessageConverter。利用Jackson开源类包处理JSON格式的请求或响应消息。
因此只需要在Spring Web容器中为RequestMappingHandlerAdapter装配处理JSON的HttpMessageConverter,并在交互过程中通过请求的Accept指定MIME类型,Spring MVC就可以使服务端的处理方法和客户端JSON格式的消息进行通信了。
org.springframework.web.bind.annotation.RequestBody
注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到Controller中方法的参数上。
当前台页面使用GET 或 POST 方式提交数据时,数据编码格式由请求头的ContentType指定。可以分为如下几种情况:
- application/x-www.form-urlencoded,这种情况的数据@RequestParam、@ModelAttribute也可以处理,并且很方便,当然@RequestBody也能处理。
- multipart/form-data,@RequestBody不能处理这种格式的数据。
- application/json、application/xml等格式的数据,必须使用@RequestBody来处理。
Spring MVC 常用注解相关推荐
- Spring MVC常用注解说明
2019独角兽企业重金招聘Python工程师标准>>> 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02 之前在使用Struts2实现MV ...
- Spring MVC常用注解,你会几个?
转载自 Spring MVC常用注解,你会几个? 常用注解 Controller 注解一个类表示控制器,Spring MVC会自动扫描标注了这个注解的类. RequestMapping 请求路径映射, ...
- spring mvc常用注解的说明
spring mvc常用注解的说明 最近一段时间学习了springboot,所以熟悉一下mvc中常用的注解,这样可以方便开发 简介: @RequestMapping RequestMapping是一个 ...
- Spring MVC常用注解--“姐妹花”@RequestBody和@ResponseBody
1. 引言 在这篇短文中,我们简要地介绍了Spring MVC中常用的注解 @RequestBody和@ResponseBody. 2. @RequestBody 简单地说,在@RequestBody ...
- Spring MVC 常用注解之 Controller 篇
Shopping Without Vision 的 project 终于告一段落,teamwork 非常给力,中间也遇到很多困难,还好都一起克服了.这是做的第二个 Spring MVC 项目了,对这 ...
- Spring MVC常用注解汇总
@Controller @Controller注解在类上,表明这个类是Spring MVC里的Controller,将其声明为Spring的一个Bean,Dispatch Servlet会自动扫描注解 ...
- spring mvc 常用注解详解
@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model , ...
- 40 个 Spring Boot 常用注解
以下文章来源方志朋的博客,回复"666"获面试宝典 作者 | 谭朝红 链接 | ramostear.com 一.Spring Web MVC 与 Spring Bean 注解 Sp ...
- 近100个Spring/SpringBoot常用注解汇总!
作者 | Guide 来源 | JavaGuide(微信公众号) 毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我 ...
- 接近8000字的Spring/SpringBoot常用注解总结!安排!
文章目录 0.前言 1. `@SpringBootApplication` 2. Spring Bean 相关 2.1. `@Autowired` 2.2. `Component`,`@Reposit ...
最新文章
- android 手机推荐,2018年安卓机皇推荐,这几款是真的不错
- SqlSelect-在查询结果前面加一列序号列
- Spring Boot 2.1之后如何在启动日志中打印请求路径列表
- python基础语法第10关作业-Python基础作业一
- luogu P3378 【模板】堆
- 信噪比与误码率的计算
- TensorFlow与主流深度学习框架对比
- Oracle表连接深入浅出
- java之Synchronized(锁住对象和锁住代码)
- 地球上最快的速度......
- android fragment 教程,Android Fragment教程总结
- 一个JAVA WEB伪全栈的VUE入坑随笔,从零点零五学起
- python教程原版_Python入门教程完整版(懂中文就能学会) pdf版+源码(讲义/笔记)
- 长链接(MQTT)测试及工具MQTTX使用
- CSMA/CD 和802.5令牌环网
- 自研ARM芯片,亲手拆掉Wintel联盟,微软这次是认真的吗?
- 自动统计文件夹下所有音频时长与个数
- 大一下学期计算机基础,计算机基础复习(大一)
- 【azkaban】开启进程秒退
- 龙芯1D处理器用户手册