什么是Spring MVC控制器方法的有效返回类型?
我在Spring MVC上没有太多经验,我有以下关于控制器方法可以返回的valids返回类型的内容 。
所以我知道用户生成一个由DispatcherServlet接收和处理的HttpRequest ,它将此请求分派给特定的控制器类。
控制器类是这样的:
@Controller public class AccountController { @RequestMapping("/showAccount") public String show(@RequestParam("entityId") long id, Model model) { ... } ....................................... ....................................... ....................................... }
所以我知道每个方法处理一个特定的请求,并且处理的请求由@RequestMapping注释指定。
我也知道该方法返回一个String对象,该对象是逻辑视图名称 (然后由视图解析器解析以呈现视图)
所以,在这个阶段,我认为控制器类的方法只返回String对象。 但我不确定。 也许像这样的方法也可以返回一些不同类型的对象?
Handler方法有许多返回类型,它由控制器内的@RequestMapping
注释,如:
-
ModelAndView(Class)
-
型号(接口)
- 地图
- 串
- 空虚
- 视图
-
HttpEntity>
或ResponseEntity>
-
HttpHeaders
还有更多….. 参见文档
每个返回类型都有其特定用途,例如:如果您使用的是String,则表示返回View Name,此视图名称将由ViewResolver
解析。 如果您不想返回任何视图名称,请提示返回类型为void
。 如果要设置视图名称以及要发送一些数据以查看使用ModelAndView
作为返回类型。
请查看文档,您还将了解可以在处理程序方法中传递哪种方法参数。
你在doc中有直接的答案
特别注意一下
如果使用@ResponseBody注释该方法,则将返回类型写入响应HTTP正文。 返回值将使用HttpMessageConverters转换为声明的方法参数类型。
当使用@ResponseBody对方法进行循环时 ,返回类型可以是任何自定义类型,任何Java pojo,框架将转换为适当的表示JSON,XML等,并写回响应正文
你可以看一下AnnotationMethodHandlerAdapter#getModelAndView 。 此方法有几个基于返回类型的条件,以选择如何处理返回的值。