spring mvc中的任意返回类型

时间:2013-03-20 17:33:40

标签: java spring spring-mvc return-type

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

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

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

2 个答案:

答案 0 :(得分:1)

ExceptionHandler方法遵循与Controller方法相同的合同。 Here's Spring 3.1中Spring MVC控制器方法的所有支持的返回类型的列表。子弹#7对你来说是最感兴趣的。

相关部分:

  

16.3.3.2支持的方法返回类型

以下是支持的返回类型:

  • 一个ModelAndView对象,该模型隐式丰富了命令对象和@ModelAttribute带注释的引用数据访问器方法的结果。

  • 一个Model对象,其视图名称通过RequestToViewNameTranslator隐式确定,并且模型隐式地使用命令对象和@ModelAttribute注释的引用数据访问器方法的结果。

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

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

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

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

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

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

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

答案 1 :(得分:1)

当然,你也可以在建议后使用aspectj做你想做的事。

private pointcut transformer() : execution(@SomeTransformer * *(..));

after() returning (Object o): transformer() {
      System.out.println("I'd like to transform this object " + o);
}

但是......我不知道你为什么要这么做..?

免责声明:这是未经测试的。