2011-02-17 107 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>