我正在使用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时如何注册我的异常映射器?
感谢。
答案 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>