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组件的实现类,即HttpMessageConverterRequestMappingHandlerAdapter使用,将请求信息转换为对象,或将对象转换为响应信息。

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.DOMSourcejavax.xml.transform.sax.SAXSourcejavax.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 常用注解相关推荐

  1. Spring MVC常用注解说明

    2019独角兽企业重金招聘Python工程师标准>>>     使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02     之前在使用Struts2实现MV ...

  2. Spring MVC常用注解,你会几个?

    转载自 Spring MVC常用注解,你会几个? 常用注解 Controller 注解一个类表示控制器,Spring MVC会自动扫描标注了这个注解的类. RequestMapping 请求路径映射, ...

  3. spring mvc常用注解的说明

    spring mvc常用注解的说明 最近一段时间学习了springboot,所以熟悉一下mvc中常用的注解,这样可以方便开发 简介: @RequestMapping RequestMapping是一个 ...

  4. Spring MVC常用注解--“姐妹花”@RequestBody和@ResponseBody

    1. 引言 在这篇短文中,我们简要地介绍了Spring MVC中常用的注解 @RequestBody和@ResponseBody. 2. @RequestBody 简单地说,在@RequestBody ...

  5. Spring MVC 常用注解之 Controller 篇

    Shopping Without Vision 的 project 终于告一段落,teamwork 非常给力,中间也遇到很多困难,还好都一起克服了.这是做的第二个 Spring MVC  项目了,对这 ...

  6. Spring MVC常用注解汇总

    @Controller @Controller注解在类上,表明这个类是Spring MVC里的Controller,将其声明为Spring的一个Bean,Dispatch Servlet会自动扫描注解 ...

  7. spring mvc 常用注解详解

    @Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model , ...

  8. 40 个 Spring Boot 常用注解

    以下文章来源方志朋的博客,回复"666"获面试宝典 作者 | 谭朝红 链接 | ramostear.com 一.Spring Web MVC 与 Spring Bean 注解 Sp ...

  9. 近100个Spring/SpringBoot常用注解汇总!

    作者 | Guide 来源 | JavaGuide(微信公众号) 毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我 ...

  10. 接近8000字的Spring/SpringBoot常用注解总结!安排!

    文章目录 0.前言 1. `@SpringBootApplication` 2. Spring Bean 相关 2.1. `@Autowired` 2.2. `Component`,`@Reposit ...

最新文章

  1. android 手机推荐,2018年安卓机皇推荐,这几款是真的不错
  2. SqlSelect-在查询结果前面加一列序号列
  3. Spring Boot 2.1之后如何在启动日志中打印请求路径列表
  4. python基础语法第10关作业-Python基础作业一
  5. luogu P3378 【模板】堆
  6. 信噪比与误码率的计算
  7. TensorFlow与主流深度学习框架对比
  8. Oracle表连接深入浅出
  9. java之Synchronized(锁住对象和锁住代码)
  10. 地球上最快的速度......
  11. android fragment 教程,Android Fragment教程总结
  12. 一个JAVA WEB伪全栈的VUE入坑随笔,从零点零五学起
  13. python教程原版_Python入门教程完整版(懂中文就能学会) pdf版+源码(讲义/笔记)
  14. 长链接(MQTT)测试及工具MQTTX使用
  15. CSMA/CD 和802.5令牌环网
  16. 自研ARM芯片,亲手拆掉Wintel联盟,微软这次是认真的吗?
  17. 自动统计文件夹下所有音频时长与个数
  18. 大一下学期计算机基础,计算机基础复习(大一)
  19. 【azkaban】开启进程秒退
  20. 龙芯1D处理器用户手册

热门文章

  1. 关于吐槽网播放映兔源视频无法播放的问题 及解决方案
  2. HAproxy的安装配置及动静分离
  3. Hibernate HQL详解
  4. 设置数据库及表的默认字符集
  5. Cordova系列(一)
  6. 编写高效优雅Java程序
  7. Pyhon 获取文件夹的大小统计
  8. 【基础版】整数加减乘除计算器
  9. 在Visual Studio中使用GitHub(使用篇)
  10. Tomcat中server.xml配置及Context的配置说明