什么是Spring MVC控制器方法的有效返回类型?

时间:2015-03-31 10:01:32

标签: java spring spring-mvc model-view-controller annotations

我在Spring MVC上没有太多经验,我有以下关于控制器方法可以返回的valids返回类型的内容。

所以我知道用户生成一个 HttpRequest ,由 DispatcherServlet 接收和处理,将此请求分派给特定的控制器类。

控制器类是这样的:

@Controller
public class AccountController {

    @RequestMapping("/showAccount")
    public String show(@RequestParam("entityId") long id, Model model) {
        ...
    }

    .......................................
    .......................................
    .......................................
}

所以我知道每个方法都处理一个特定的请求,并且处理的请求是由 @RequestMapping 注释指定的。

我也知道该方法返回一个 String 对象,即逻辑视图名称(然后由视图解析器解析)渲染视图)

所以,在这个阶段,我认为控制器类的方法只返回 String 对象。但我不确定。也许像这样的方法也可以返回一些不同类型的对象?

3 个答案:

答案 0 :(得分:20)

Handler方法有许多返回类型可供控制器内的@RequestMapping注释,如:

  • ModelAndView(Class)

  • 模型(界面)

  • 地图
  • 字符串
  • void
  • 查看
  • HttpEntity<?>ResponseEntity<?>
  • HttpHeaders

以及更多..... See Docs

每个返回类型都有其特定用途,例如:如果您使用的是String,则表示返回View Name,此视图名称将由ViewResolver解析。如果您不想返回任何视图名称,请提回返回类型为void。如果要设置视图名称以及要发送一些数据以查看使用ModelAndView作为返回类型。

请查看文档,您还将了解可以在处理程序方法中传递哪种方法参数。

答案 1 :(得分:2)

您可以在doc

中找到直接答案

特别注意

  

如果使用@ResponseBody注释该方法,则返回类型为   写入响应HTTP正文。返回值将被转换   使用HttpMessageConverters到声明的方法参数类型。

当使用 @ResponseBody 对方法进行处理时,返回类型可以是任何自定义类型,任何Java pojo,框架将转换为适当的表示JSON,XML等并写回回应机构

答案 2 :(得分:1)

你可以看一下AnnotationMethodHandlerAdapter#getModelAndView。此方法有几个基于返回类型的条件,用于选择如何处理返回值。