springmvc-resteasy和异常映射

时间:2011-02-17 23:51:46

标签: spring exception resteasy

我正在使用RESTEAsy Spring MVC集成(springmvc-resteasy使用RestEasy 2.0,Spring 3.0)我想通过声明RESTEasy异常映射提供程序将我的应用程序异常映射到HTTP响应。目前我的应用程序没有明确扩展javax.ws.rs.core.Application,理想情况下我想依赖框架自动扫描异常映射提供程序。

这是我的一个异常映射器的样子。

@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时如何注册我的异常映射器?

感谢。

1 个答案:

答案 0 :(得分:2)

我收到Solomon Duskis的答复,我在这里发帖是为了确保遇到此问题的其他人能够迅速解决问题。我怀疑,我不得不以某种方式配置Spring配置RESTEasy来扫描我的异常映射提供程序。我在我的异常映射器中添加了@Component 用于将MyAppException映射到正确的HTTP响应代码(在本例中为400而不是500)。但是,这里有一个警告:RESTEasy没有序列化MyAppException,因为“ java.lang.StackTraceElement没有no-arg默认构造函数。”我正在为这个次要问题寻找解决方案。

  

您可以将组件扫描自定义为@Providers,也可以添加   @Component到您的异常映射器以将其添加到您的上下文中。以下是您可以从@Providers进行扫描的方法:

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