java - spring mvc 中的任意返回类型

标签 java spring spring-mvc return-type

ExceptionHandler 可以返回 ModelAndView、Model、Map 等。是否可以返回我自己类型的对象并注册一些转换器,可以将我的类型转换为 Spring 可以理解的类型之一?例如:

@ExceptionHandler
public MyType handle(Exception e) {
  ...
}

@SomeTransformer
public Map convert(MyType myObject) {
   ...
}

最佳答案

ExceptionHandler 方法遵循与 Controller 方法相同的约定。 Here's Spring 3.1 中 Spring MVC Controller 方法所有支持的返回类型的列表。您最感兴趣的是项目符号 #7。

相关部分:

16.3.3.2 Supported method return types

以下是支持的返回类型:

  • 一个 ModelAndView 对象,其中模型隐式地通过命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果进行了丰富。

  • 模型对象,其 View 名称通过 RequestToViewNameTranslator 隐式确定,模型隐式地使用命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果进行丰富。

  • 用于公开模型的 Map 对象,通过 RequestToViewNameTranslator 隐式确定 View 名称,并使用命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果隐式丰富模型。

  • 一个 View 对象,其模型通过命令对象和 @ModelAttribute 注释的引用数据访问器方法隐式确定。处理程序方法还可以通过声明模型参数以编程方式丰富模型(参见上文)。

  • 一个字符串值,被解释为逻辑 View 名称,模型通过命令对象和 @ModelAttribute 注释的引用数据访问器方法隐式确定。处理程序方法还可以通过声明模型参数以编程方式丰富模型(参见上文)。

  • 如果方法本身处理响应(通过直接写入响应内容,为此目的声明 ServletResponse/HttpServletResponse 类型的参数),或者如果 View 名称应该通过 RequestToViewNameTranslator 隐式确定(不是在处理程序方法签名中声明响应参数)。

  • 如果该方法使用 @ResponseBody 注解,则返回类型将写入响应 HTTP 正文。返回值将使用 HttpMessageConverters 转换为声明的方法参数类型。请参阅第 16.3.3.5 节“使用 @ResponseBody 注释映射响应正文”。

  • 一个 HttpEntity 或 ResponseEntity 对象,用于提供对 Servlet 响应 HTTP header 和内容的访问。实体主体将使用 HttpMessageConverters 转换为响应流。请参阅第 16.3.3.6 节“使用 HttpEntity”。

任何其他返回类型都被视为要公开给 View 的单个模型属性,使用在方法级别通过 @ModelAttribute 指定的属性名称(或基于返回类型类名称的默认属性名称)。该模型通过命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果隐式丰富。

关于java - spring mvc 中的任意返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530735/

相关文章:

java - GWT错误: "Class is used in Gin, but not available in GWT client code"

java - POJO for rest Get调用返回java中嵌套的复杂json

java - Spring Boot 组件扫描上下文

java - 在Windows上直接获取Java可访问性

java - 在 C++ 中是否有一个具有类似功能的 TreeSet 数据结构?

java - AnnotationSessionFactoryBean 和单例作用域 bean(Spring 框架)

java - 如何配置pom.xml文件-spring和hibernate

java - DeferredResult 的 Spring MVC 单元测试不调用超时回调

java - 使用 UriBuilder 的 HATEOAS 链接

java - 如何在 Spring 中实现弹性 bean?