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类型