我编写了一些异常映射器来捕获和处理内置的休息容易异常,如NotFoundException,MethodNotAllowedException等,示例代码如下所示:
@Provider
public class NotFoundExceptionMapper implements ExceptionMapper<org.jboss.resteasy.spi.NotFoundException>
{
@Override
Response toResponse(org.jboss.resteasy.spi.NotFoundException exception) {
return Response.status(500).build();
}
}
我还在我的web过滤器类中编写了一个try catch块 . 每当发生NotFoundException时,它都不会被映射器捕获,而是进入Filter中的catch块 .
而我已经尝试了另一个异常映射器类来处理JsonParsingException . 这是正常工作的,只要发生Json Parse异常,就会从映射器给出适当的响应 .
问题仅在于重新安排异常的情况 . 此外,提供程序已在组件扫描中使用include-filter标记在应用程序上下文中注册 .
请指导我在mapper类本身中需要做些什么来捕获简单的内置异常 .
此致,RM
3 回答
我有同样的问题 . 使用@Component注释NotFoundExceptionMapper应该修复它(或将NotFoundExceptionMapper作为bean添加到应用程序上下文(xml文件)) .
当您的Spring上下文启动时,应该注册NotFoundExceptionMapper(您应该在日志记录中使用“在...中预先实例化单例”)
这是我的演示项目
1)一个简单的RESTful应用程序,包含3个java文件:
1.1)RestNotFoundExceptionHandler.java
1.2)AppRest.java
1.3)AppMain.java
2)项目依赖项,4个jar文件
3)卷曲测试用例:
3.1)正常情况:
3.2)RestNotFoundExceptionHandler案例:
我尝试了同样的事情,并在尝试映射UnsupportedMediaTypeException时遇到了麻烦 .
根据http://docs.jboss.org/resteasy/docs/1.1.GA/userguide/html/ExceptionHandling.html和Exception Mappers部分下的第一行,您似乎只能映射应用程序异常 .