5

我一直在尝试在基于 Spring 3 的简单 ReST Web 服务中进行异常处理。根据我所看到的一切,有一个错误会阻止它自动与 @ResponseBody 和 @ExceptionHandler 注释一起工作

https://jira.springsource.org/browse/SPR-6902

因此,鉴于直到 Spring 3.1 或 3.0.6 才支持它,当前进行异常处理的最佳方法是什么?我看过很多帖子,但没有找到对我有用的明确答案。一个理想的解决方案是自动提供对 xml 和 json 的支持

  • 我是否必须手动定义整个编组设置?这不会消除对使用 Spring 3 其余支持的注释的需要吗?
  • 似乎为了手动定义编组(即 Jaxb2Marshaller),我需要添加对 spring-ws 的新依赖,这有点痛苦
  • 只定义一个我的所有方法返回的“响应”对象并将所有函数包装在 try/catch 块中是否更容易?
4

2 回答 2

7

您可以重定向错误,然后返回@ResponseBody

@ExceptionHandler(Exception.class)
public ModelAndView handleMyException(Exception  exception) {
    return new ModelAndView("redirect:errorMessage?error="+exception.getMessage());
} 

@RequestMapping(value="/errorMessage", method=RequestMethod.GET)
@Responsebody
public String handleMyExceptionOnRedirect(@RequestParameter("error") String error) {
    return error;
} 

有点难看,但这只是在修复可用之前解决。

于 2011-06-07T16:38:16.600 回答
0

这是一个很好的解决方法,但需要添加一个。@ExceptionHandler (Exception.class) 应该是@ExceptionHandler(MyException.class, YourException.class)因为您可以使用通用 Exception 类进入循环。

然后,您可以测试 (ex instanceof Myexception) 以确定需要显示的消息。

于 2011-06-10T19:17:57.543 回答