2013-07-04 218 views
0

我有一個Spring 3.2應用程序,我創建了一個基於Spring MVC的REST API。我正在使用@ControllerAdvice註釋進行自定義異常處理。例如:Spring REST API自定義異常處理

@ControllerAdvice 
public class RestResponseEntityExceptionHandler { 

    @ExceptionHandler(MyCustomException.class) 
    @ResponseStatus(HttpStatus.CONFLICT) 
    @ResponseBody 
    public ExceptionMessage handleMyCustomException(MyCustomException ex){ 
     return new ExceptionMessage(ex.getClass().getName(), ex.getMessage(), ex.getExceptionCode()); 
    } 
} 

的問題是,我看到我的自定義異常被拋出如何,但實際上沒有執行異常處理方法,因此我的異常消息不會返回給客戶端。相反,我在日誌中注意到DefaultHandlerExceptionResolver如何處理異常(使用Spring通用的一種,GET方法中的ServletRequestBindingException)。我怎樣才能擺脫這個問題?

謝謝!

+0

'component-scan base-package'屬性中列出'RestResponseEntityExceptionHandler'包嗎? – zeroflagL

+0

@zeroflagL是的,它是 – jarandaf

+1

等一下,'ServletRequestBindingException'?聽起來像你的異常在處理器方法被調用之前拋出。 – zeroflagL

回答

0

ServletRequestBindingException暗示控制器的處理程序方法出錯了。在這種情況下,一些綁定問題。

只有在控制器處理程序方法(@RequestMapping)內引發異常時,纔會調用註解@ExceptionHandler的異常處理程序。

+1

有沒有什麼方法可以在自動公開的spring-data-rest端點中自定義異常處理? – Rafael