Spring 3,ReST,@ ResponseBody和@ExceptionHandler

时间:2011-06-07 14:45:03

标签: spring jaxb2

我一直在尝试使用简单的基于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上添加一个新的依赖,这有点痛苦
  • 是否更容易定义一个'Response'对象,我的所有方法都返回并将所有函数包装在try / catch块中?

2 个答案:

答案 0 :(得分: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;
} 

有点难看,但这只是解决方法,直到修复可用。

答案 1 :(得分:0)

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

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