RESTEasy ExceptionMapper无法使用Spring Boot

时间:2015-01-30 10:03:30

标签: spring spring-boot resteasy


    我们使用Spring Boot进行集成测试,使用RESTEasy进行REST URL。我为BadRequestException配置了一个ExceptionMapper,因为我已经为发送错误请求时抛出的异常添加了一个测试用例。为了抑制因此引发的RESTEasy异常,我添加了一个扩展RESTEasy的ExceptionMapper的BadRequestExceptionHandler。我正在使用' @SpringBootApplication'但添加了@ ComponentScan'使用includeFilters将类型设置为ANNOTATION,将值设置为Provider.class。我已将我的处理程序类标记为@Component,因此Spring能够创建bean(自动装配工作)但RESTEasy没有选择此处理程序,我继续在日志中看到异常。

有人可以指出我做错了吗?

@Provider
@Component
public class BadRequestExceptionHandler implements ExceptionMapper<BadRequestException> {
    @Override
    public Response toResponse(BadRequestException exception) {
        return Response.status(Response.Status.BAD_REQUEST)
                      .entity(exception.getMessage())
                      .build();
    }
}

@SpringBootApplication
@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))
public class TestApplication extends SpringBootServletInitializer {
...
}

谢谢,
稻谷

2 个答案:

答案 0 :(得分:2)

我知道这与您的问题没有直接关系,但这实际上可以解决您的问题。通过使用RESTEasy Spring Boot启动程序将RESTEasy用作JAX-RS实现,可以构建Spring Boot REST应用程序:

<强> com.paypal.springboot:RestEasy的弹簧引导起动

请参阅项目网站:https://github.com/paypal/resteasy-spring-boot/

答案 1 :(得分:1)

我使用的是自定义Undertow嵌入式服务器,使用自定义JaxRs应用程序类(在我的任务开始之前已经声明,所以最好重用它)。因此,我必须设置一个使用我的自定义异常映射器配置的Provider Factory,并在Resteasy部署对象上设置提供者工厂。这是代码:

ResteasyDeployment deployment = new ResteasyDeployment();
ResteasyProviderFactory providerFactory =
            ResteasyProviderFactory.getInstance();
providerFactory.addExceptionMapper(BadRequestExceptionMapper.class); // My custom exception mapper
deployment.setProviderFactory(providerFactory);

谢谢, 稻谷