ExceptionHandler 可以返回 ModelAndView、Model、Map 等。是否可以返回我自己类型的对象并注册一些可以将我的类型转换为 Spring 理解的类型之一的转换器?例如:
@ExceptionHandler
public MyType handle(Exception e) {
...
}
@SomeTransformer
public Map convert(MyType myObject) {
...
}
ExceptionHandler 可以返回 ModelAndView、Model、Map 等。是否可以返回我自己类型的对象并注册一些可以将我的类型转换为 Spring 理解的类型之一的转换器?例如:
@ExceptionHandler
public MyType handle(Exception e) {
...
}
@SomeTransformer
public Map convert(MyType myObject) {
...
}
ExceptionHandler 方法遵循与 Controller 方法相同的约定。 这是Spring 3.1 中 Spring MVC 控制器方法支持的所有返回类型的列表。Bullet #7 将是您最感兴趣的。
相关部分:
16.3.3.2 支持的方法返回类型
以下是支持的返回类型:
一个 ModelAndView 对象,模型隐含地丰富了命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果。
一个模型对象,视图名称通过 RequestToViewNameTranslator 隐式确定,模型隐式地丰富了命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果。
用于公开模型的 Map 对象,视图名称通过 RequestToViewNameTranslator 隐式确定,模型隐式地丰富了命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果。
一个 View 对象,模型通过命令对象和 @ModelAttribute 注释的引用数据访问器方法隐式确定。处理程序方法还可以通过声明模型参数以编程方式丰富模型(见上文)。
一个字符串值,被解释为逻辑视图名称,模型通过命令对象和 @ModelAttribute 注释的引用数据访问器方法隐式确定。处理程序方法还可以通过声明模型参数以编程方式丰富模型(见上文)。
如果方法本身处理响应(通过直接编写响应内容,为此目的声明 ServletResponse / HttpServletResponse 类型的参数)或视图名称应该通过 RequestToViewNameTranslator 隐式确定(不在处理程序方法签名)。
如果该方法使用 @ResponseBody 注释,则返回类型将写入响应 HTTP 正文。返回值将使用 HttpMessageConverters 转换为声明的方法参数类型。请参阅第 16.3.3.5 节,“使用 @ResponseBody 注释映射响应正文”。
一个 HttpEntity 或 ResponseEntity 对象,用于提供对 Servlet 响应 HTTP 标头和内容的访问。实体主体将使用 HttpMessageConverters 转换为响应流。请参阅第 16.3.3.6 节,“使用 HttpEntity”。
任何其他返回类型都被认为是要暴露给视图的单个模型属性,使用通过 @ModelAttribute 在方法级别指定的属性名称(或基于返回类型类名称的默认属性名称)。该模型隐含地丰富了命令对象和 @ModelAttribute 注释的引用数据访问器方法的结果。
当然,您也可以使用aspectj
事后建议来做您想做的事。
private pointcut transformer() : execution(@SomeTransformer * *(..));
after() returning (Object o): transformer() {
System.out.println("I'd like to transform this object " + o);
}
但是..我不知道你为什么要那样做..?
免责声明:这是未经测试的。