支持的返回类型包括:
1. ModelAndView ,其中model被command 对象以及由@ModelAttribute 元注解所标注的数据处理函数的返回值,隐式地进行丰富。
2. Model 对象,view 名称隐式的通过RequestToViewNameTranslator 来决定,并且model被command 对象以及由@ModelAttribute 元注解所标注的数据处理函数的返回值,隐式地进行丰富。
3. 将向model对象暴露的一个map对象,view名称隐式的通过RequestToViewNameTranslator 来决定,并且model被command 对象以及由@ModelAttribute 元注解所标注的数据处理函数的返回值,隐式地进行丰富。
4. View 对象,model被command 对象以及由@ModelAttribute 元注解所标注的数据处理函数的返回值,隐式地进行丰富。handler 函数也可以以编程的方式来丰富model对象,例如:处理器的形参为对该model的引用,此时在handler函数中对model的修改,都将实际影响该model。
5. 一个String 对象,解释为逻辑视图的名称,model被command 对象以及由@ModelAttribute 元注解所标注的数据处理函数的返回值,隐式地进行丰富。handler 函数也可以以编程的方式来丰富model对象,例如:处理器的形参为对该model的引用,此时在handler函数中对model的修改,都将实际影响该model。
6. void ,如果该函数自己处理response(直接写出response 内容,为了直接写出response 内容,可以声明一个ServletResponse/HttpServletResponse 类型)或者view的名称被认为可以通过RequestToViewNameTranslator 隐式决定(在handler的方法签名中不声明一个response 参数)时,应该返回void。
7. 如果方法标注了@ResponseBody 元注解,那么返回类型将被写入到response HTTP body中。返回值将通过HttpMessageConverter 转换成声明的方法参数类型。
8. HttpEntity<?> or ResponseEntity<?> 用来提供对servelt response 的HTTP 头部和内容的操作。entity 的body将通过HttpMessageConverter 转换成response 流。
9. HttpHeader:没有body的响应。
10.Callable<?> :如果应用想要由spring mvc托管的某个线程中异步生产出返回值,此时handler的返回值可以是一个Callable<?>.
11. DeferredResult<?> : 如果应用想要由它自己选定的某个线程来生产出返回值,此时handler的返回值可以是一个DeferredResult<?> 。
12. ListenableFuture<?>or CompletableFuture<?>/CompletionStage<?> :如果应用想要通过一次线程池的提交来生产出返回值,此时handler的返回值可以是ListenableFuture<?>or CompletableFuture<?>/CompletionStage<?>
13. ResponseBodyEmitter :如果想要实现异步向response中写入多个对象时,需要返回ResponseBodyEmitter ,ResponseBodyEmitter
也可以作为ResponseEntity 中的body。
14. SseEmitter :如果应用想要异步向response中写入server-sent-event(服务器端发送的消息),此时可以返回SseEmitter ,SseEmitter
也可以作为ResponseEntity 中的body。
15. StreamingResponseBody :如果应用想要异步向response outputstream中写入时,可以返回一个StreamingResponseBody 对象, StreamingResponseBody 也可以作为ResponseEntity 中的body。
16. 通过在函数级别上使用@ModelAttribute 元注解的方式(或者默认的属性名称由返回类型的class名称来决定),任意其他返回类型都可以被认为是需要暴露给view的一个model attribute。model被command 对象以及由@ModelAttribute 元注解所标注的数据处理函数的返回值,隐式地进行丰富。