2011-06-07 101 views
5

我一直在尝试在基于简单Spring 3的ReST Web服务中获取异常处理。基于一切我都看到了,还有就是防止这种与和@ResponseBody注释@ExceptionHandlerSpring 3,ReST,@ResponseBody和@ExceptionHandler

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

所以因为它不支持,直到春天3.1或3.0.6自动工作中的错误,目前做异常处理的最佳方法是什么?我看过很多帖子,但没有找到一个明确的答案,为我工作。一个理想的解决方案将自动提供支持xml和json

  • 我是否必须手动定义整个编组设置?这不会消除使用Spring 3 rest支持值得注意的需求吗?
  • 似乎为了手动定义编组(即Jaxb2Marshaller)我需要在spring-ws上添加一个新的依赖关系,这有点痛苦
  • 只是定义一个'Response'对象,我的所有方法返回并包装try/catch块中的所有函数?
+0

相关信息:http://stackoverflow.com/questions/6014784/serialize-exceptions-to-json-with-spring-mvc – Bozho 2011-06-07 16:41:39

回答

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; 
} 

难看一点,但是这仅仅是解决直到修复将可用。

+2

+1解决方法。这也意味着客户端将不得不处理重定向。如果他期待结果,可能会造成问题。只是有些人抬头......干杯! – despot 2011-07-18 10:02:44

+0

另一个解决方法[这里](http://stackoverflow.com/questions/5097134/spring-exceptionhandler-does-not-work-with-responsebody/5097584#5097584) – 2011-09-01 11:34:23

0

这是一个很好的解决方法,但有一个补充。 @ExceptionHandler(Exception.class) 应该是@ExceptionHandler(MyException.class,YourException.class),因为您可以使用常规Exception类进入循环。

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