Spring 4.x官方参考文档中文版——第21章 Web MVC框架(10)

来源:互联网 发布:黑马软件测试 编辑:程序博客网 时间:2024/05/22 13:09

使用@SessionAttributes来储存请求中HTTP session的model attribute(模型属性)

        类级别的@SessionAttributes声明了session attributes会被特定的handler处理器所使用。它会把储存在session中,或者conversational storage(会话储存)中的model attribute(模型属性)的名称或类型列出来,在随后的request请求中作为表格式的bean来为其服务。

下面的代码片段展示了这个注解的使用,定义了这个模型属性的名称:


处理带有”application/x-www-form-urlencoded”的数据

        上面的章节介绍了使用@ModelAttribute来支持从浏览器客户端中提交表单的请求。这个注解同样也支持来自非浏览器客户端的请求。这两种情况间,当请求是HTTP PUT的时候会有些不同,浏览器能通过HTTP GET或HTTP POST来提交表单数据,非浏览器的客户端也能通过HTTP PUT来提交表单。这代表着这个Servlet应用要求ServletRequest.getParameter*()这个系列的各种方法只支持通过HTTP POST访问表单字节,不支持HTTP PUT。

       为了支持HTTP PUT和PATCH请求,spring-web模块提供了HttpPutFormContentFilter过滤器,它能在web.xml中进行配置:


       上图中所示的过滤器能过滤内容类型是”application/x-www-form-urlencoded”的HTTP PUT 和 PATCH请求,读取请求主体中的表单数据,然后封装好ServletRequest,以便使ServletRequest.getParameter*()系列的方法能够奏效。

 

小提示:

         当HttpPutFormContentFilter在处理请求的主体时,不能配置那些依赖了application/x-www-form-urlencoded转换器的PUT和PATCH 的URL。包括@RequestBody, MultiValueMap<String, String> 和 HttpEntity<MultiValueMap<String, String>>。

 

使用@CookieValue映射cookie值

       @CookieValue允许HTTP cookie和方法参数绑定到一起。让我们看看下面的cookie,这个cookie接收自一个http请求。


       下面的代码演示了怎样获取这个cookie里的JSESSIONID值:


       若目标方法参数的类型不是String时,类型转换器将自动启用。详见”方法参数和类型转换”这一章节。

       这个注解支持在Servlet和Portlet环境下,注解过的处理器方法中使用。

 

使用@RequestHeader映射请求报头属性

       @RequestHeader注解能够使方法参数与请求报头绑定。

下面是一个请求报头的示例:


       下面的代码示例展示了怎么样获取Accept-Encoding和Keep-Alive报头的值:


       若目标方法参数的类型不是String时,类型转换器将自动启用。详见”方法参数和类型转换”这一章节。

       当@RequestHeader注解在一个Map<String, String>或MultiValueMap<String,String>,或HttpHeader入参上使用,这个map将被所有报头值填充。

 

小提示:

         类型转换器内置支持把逗号分隔的字符串转换成字符串数组或集合,或者其他类型转换器已知的类型。例如:一个方法参数里被标注了@RequestHeader(“Accept”),可能是String类型,也可能是String[] 或者List<String>。

 

         这个注解支持在Servlet和Portlet环境下,注解过的处理器方法中使用。

 

方法参数与类型转换

       在请求中,基于字符串的值包括有:请求参数,路径变量,请求报头和cookie值,这些值可能需要被转换类型,这个类型是它们所要绑定的方法参数的参数类型或字段(比如:使用@ModelAttribute参数来把一个字段与请求参数绑定)。如果目标类型不是String,Spring会自动的转换成合适的类型,包括所有基本类型,如:int, long, Data等等。你也能够通过使用WebDataBinder(详见”自定义WebDataBinder初始化”),或者使用FormattingConversionService注册Formatter来自定义转换过程(详见”8.6 Spring字段格式化”)。

1 0
原创粉丝点击