2011-02-17 81 views
0

我正在使用RESTEAsy Spring MVC集成(使用RestEasy 2.0,Spring 3.0的springmvc-resteasy)我想通過聲明RESTEasy異常映射提供程序將我的應用程序異常映射到HTTP響應。目前我的應用程序沒有明確擴展javax.ws.rs.core.Application,理想情況下我想依靠框架自動掃描異常映射提供程序。springmvc- resteasy和異常映射

這是我的一個異常映射器的樣子。

@Provider public class MyAppExceptionMapper implements ExceptionMapper<MyAppException> { 
    public Response toResponse(MyAppException exception) { 
      return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 

我的異常類,看起來像這樣

public class MyAppException extends RuntimeException { 
    public MyAppException(String s, Throwable t) { 
    super(s,t); 
    } 
} 

當我的應用程序將引發MyAppException,它不會映射到HTTP-400反應(我從框架得到普通HTTP-500 )

有什麼我失蹤?如果這不是用框架「註冊」提供者的問題,那麼當我使用springmvc-resteasy時,如何註冊我的異常映射器?

謝謝。

回答

2

我收到了Solomon Duskis的回覆,我在此發帖以確保遇到此問題的其他人可以快速解決問題。正如我懷疑的,我不得不以某種方式配置Spring配置RESTEasy來掃描我的異常映射提供程序。我在我的異常映射程序中添加了@Component,並且確實用於將MyAppException映射到正確的HTTP響應代碼(在本例中爲400而不是500)。但是,以下是一個警告:MyAppException不會被RESTEasy序列化,因爲「java.lang.StackTraceElement沒有無參數默認構造函數」。我正在尋找這個第二個問題的解決方案。

您可以自定義組件,掃描至@Providers,或添加 一個@Component您例外映射器將其添加到您的上下文。以下是您可以從@Providers掃描的方式:

<context:component-scan base-package="bean"> 
    <context:include-filter type="annotation" expression="javax.ws.rs.ext.Provider"/> 
</context:component-scan>