2011-06-07 68 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)以確定要顯示的消息(如果需要)。