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

Posted

技术标签:

【中文标题】Spring MVC 控制器方法的有效返回类型是啥?【英文标题】:What are valid return types of a Spring MVC controller method?Spring MVC 控制器方法的有效返回类型是什么? 【发布时间】:2015-06-04 15:02:36 【问题描述】:

我在 Spring MVC 方面没有太多经验,我有以下关于控制器方法可以返回的有效返回类型是什么

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

控制器类是这样的:

@Controller
public class AccountController 

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

    .......................................
    .......................................
    .......................................

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

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

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

【问题讨论】:

有很多返回类型,你可以返回你需要的,检查这个***.com/questions/7383622/… Craig Walls 的“Spring in Action”非常适合解释 Spring MVC 这在 Spring 文档中有非常详尽的介绍:docs.spring.io/spring/docs/current/spring-framework-reference/… 【参考方案1】:

Handler 方法有多种返回类型可用,在控制器内部由@RequestMapping 注释,例如:

ModelAndView(类)

模型(接口)

地图 字符串 无效 查看 HttpEntity<?>ResponseEntity<?> HttpHeaders

还有更多.....See Docs

每种返回类型都有其特定用途,例如:如果您使用字符串,则表示返回视图名称,此视图名称将由ViewResolver 解析。如果您不想返回任何视图名称,请提及返回类型为void。如果您想设置视图名称以及发送一些数据到视图,请使用ModelAndView 作为返回类型。

请阅读文档,您还将了解可以在处理程序方法中传递什么样的方法参数。

【讨论】:

【参考方案2】:

您在doc有直接答案

特别注意

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

当方法被 @ResponseBody 注释时,返回类型可以是任何自定义类型,任何 Java pojo,框架将转换为适当的表示 JSON、XML 等并写回到响应体

【讨论】:

【参考方案3】:

您可以查看AnnotationMethodHandlerAdapter#getModelAndView。该方法有几个条件根据返回类型来选择如何处理返回值。

【讨论】:

以上是关于Spring MVC 控制器方法的有效返回类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC @Controller中返回值为void类型

Spring MVC 控制器返回类型

spring mvc 的工作流程是啥

Spring mvc 实现jsonp和json数据类型

Spring MVC @Controller控制器方法String字符串 的

Spring MVC @Controller控制器方法String字符串 的