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

原创 2016年06月01日 10:08:52
支持的方法返回参数类型
        以下是支持的方法返回参数类型:
  • ModelAndView : 这个对象由包括了指令对象的model模型,和带@ModelAttribute注解的数据访问方法的返回结果组成。
  • Model : 模型对象,由通过RequestToViewNameTranslator决定了的视图名,包括了指令对象的model模型,和带@ModelAttribute注解的数据访问方法的返回结果共同组成。
  • Map : map对象代表了model模型,由通过RequestToViewNameTranslator决定了的视图名,包括了指令对象的model模型,和带@ModelAttribute注解的数据访问方法的返回结果共同组成。
  • View : view对象,由通过指令对象决定了的model模型,和带@ModelAttribute注解的数据访问方法的返回结果共同组成。它的处理器方法中,也可以用编程的方式来声明一个Model参数,并添加进这个model模型里。
  • String : 一个字符串值,可以被当成视图名,由通过指令对象决定了的model模型,和带@ModelAttribute注解的数据访问方法的返回结果共同组成。它的处理器方法中,也可以用编程的方式来声明一个Model参数,并添加进这个model模型里。
  • void :如果这个方法自己处理响应(通过声明一个ServletResponse/HttpServletResponse类型的方法入参,在里面直接写响应的内容这种方式),或者视图名支持通过RequestToViewNameTranslator来指定时使用(在处理器方法中没有声明一个response(响应)入参)。
  • 如果方法被@ResponseBody注解了,返回的参数类型会被写到响应的HTTP主体中,返回值会被HttpMessageConverters转换成声明了的方法入参类型。详见”使用@ResponseBody注解映射响应主体”这一章节。
  • HttpEntity<?> ResponseEntity<?> : 这两个对象是提供了Servlet响应HTTP 报头和内容的访问权。这个实体的主体部分会被HttpMessageConverters转换为响应stream(数据流),详见”使用HttpEntity”这一章节。
  • HttpHeaders : 这个对象可以返回一个没有body(主体)部分的响应。
  • Callable<?> : 在Spring MVC的管控下,当应用需要在一个线程中异步地产生返回值时,这个值能够通过这个对象进行返回。
  • DeferredResult<?> : 当应用需要在被特定的线程中异步地产生返回值时,这个值能够通过这个对象进行返回。
  • ListenableFuture<?> : 当应用需要在被特定的线程中异步地产生返回值时,这个值能够通过这个对象进行返回。
  • ResponseBodyEmitter : 能把多个对象异步地写到响应中并返回,同样也能通过在主体中使用ResponseEntity来支持。
  • SseEmitter : 能把Server-Sent Events(服务端推送事件)异步地写入到响应中并返回,也能通过在主体中使用ResponseEntity来支持。
  • StreamingResponseBody : 能把响应的OutPutStream异步地写入到返回值中,也能通过在主体中使用ResponseEntity来支持。
  • 使用通过在方法级的@ModelAttribute特定的属性名(或者基于返回类型的类名的默认属性名)的任何能在视图中展示的单个model模型属性的返回类型,包括了有指令对象的model模型,和带@ModelAttribute注解的数据访问方法的返回结果共同组成。


使用@RequestParam把请求参数绑定到方法参数上
        使用@RequestParam注解,能够在你的controller上,把请求参数绑定到方法参数上。

        请看下面的使用实例代码:


         默认情况下,参数是必须要用这个注解的,但是你能通过把@RequestParam的required属性设置为false,来使特定参数变得可选。(比如:@RequestParam(path=”id”,required=false))。
         如果目标的方法参数的类型不是String,会被自动转换成String,请参考”方法参数和类型转换”这一章节。
如果在Map<String, String>或者MultiValueMap<String, String>的方法入参上使用@RequestParam注解,这个map将被所有请求参数填充。


使用@RequestBody注解来映射request请求主体

        方法参数中的@RequestBody注解,代表了这个方法参数与HTTP请求主体的值绑定在一起,比如:


 
        通过使用HttpMessageConverter,你把请求的主体转换成了一个方法入参。HttpMessageConverter可以把HTTP请求的消息转换为一个对象,也可以把一个对象转换成HTTP响应主体。利用以下默认的HttpMessageConverters,RequestMappingHandlerAdapter可以支持@RequestBody注解:
  • ByteArrayHttpMessageConverter : 可以转换字节数组。
  • StringHttpMessageConverter : 可以转换字符串。
  • FormHttpMessageConverter : 可以在表单数据和MultiValueMap<String, String>间互相转换。
  • SourceHttpMessageConverter : 可以转换成一个javax.xml.transform.Source。


        如果需要详细了解这些转换器,见”消息转换器”这一章节。同时请注意,如果使用MVC命名空间或者MVC java配置,默认会注册很多不同功能的信息转换器。详见”启用MVC Java配置或MVC XML命名空间”这一章节。

        如果你想读写XML,你需要利用在org.springframework.oxm包里的Marshaller和Unmarshaller实现,来配置MarshallingHttpMessageConverter。下面的例子展示了在配置文件中的配置方法,但是如果你是通过MVC命名空间或者MVC Java配置应用,请参考” 启用MVC Java配置或MVC XML命名空间”这一章节。


 
         一个@RequestBody方法参数能被@Valid所注解,这种情况下,这个方法参数能被配置好的Validator实例所验证。当使用MVC 命名空间或MVC Java配置时,假定在classpath(类路径)中可以使用JSR-303的实现时,JSR-303验证器将会被自动配置好。


小提示:

      也可参考” 启用MVC Java配置或MVC XML命名空间”这一章节,来获得更多关于通过使用MVC配置命名空间或MVC Java配置,来配置消息转换器和验证器的信息。


利用@ResponseBody注解映射响应主体

        @ResponseBody注解与@RequestBody很相似,这个注解放在方法上面,代表方法的返回类型直接写入到HTTP响应的主体中(而不是被放置在一个model模型中,或者被当作一个视图名),例如:


         上面的例子会把“Hello World”直接写入到HTTP响应数据流中。

         利用@RequestBody,Spring会利用HttpMessageConverter来把返回的对象转换成一个响应主体。如需了解关于转换器的更多信息,见前面的”消息转换器”这一章节。


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

21.3 实现Controller控制器
  • HermaeuxMora
  • HermaeuxMora
  • 2016年05月17日 15:43
  • 2856

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

地区(locale)的使用
  • HermaeuxMora
  • HermaeuxMora
  • 2016年07月19日 11:29
  • 662

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

21.14 HTTP缓存支持,21.14.1 HTTP报头:Cache-Control
  • HermaeuxMora
  • HermaeuxMora
  • 2017年02月04日 16:57
  • 357

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

Web安全、“约定优先于配置“的支持、ControllerClassNameHandlerMapping控制器
  • HermaeuxMora
  • HermaeuxMora
  • 2016年11月05日 20:44
  • 599

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

21.15 基于代码的Servlet容器初始化
  • HermaeuxMora
  • HermaeuxMora
  • 2017年02月27日 17:34
  • 248

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

21.6 使用flash attribute(flash属性)
  • HermaeuxMora
  • HermaeuxMora
  • 2016年07月05日 14:47
  • 551

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

主题(theme)的使用,主题的定义,主题解析器
  • HermaeuxMora
  • HermaeuxMora
  • 2016年07月27日 23:51
  • 396

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

21.16.5 Interceptor(拦截器) 21.16.6 Content Negotiation(内容协商) 21.16.7 View Controllers(视图控制器)...
  • HermaeuxMora
  • HermaeuxMora
  • 2017年03月06日 20:50
  • 385

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

把数据传输到重定向目标、“redirect: ”前缀、“forward: ”前缀
  • HermaeuxMora
  • HermaeuxMora
  • 2016年06月29日 10:31
  • 739

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

21.10 Spring的multipart (多部件)(文件上传)支持
  • HermaeuxMora
  • HermaeuxMora
  • 2016年08月01日 11:20
  • 429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring 4.x官方参考文档中文版——第21章 Web MVC框架(8)
举报原因:
原因补充:

(最多只允许输入30个字)