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

支持的方法返回参数类型
        以下是支持的方法返回参数类型:
  • 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来把返回的对象转换成一个响应主体。如需了解关于转换器的更多信息,见前面的”消息转换器”这一章节。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值