我们使用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 {
...
}
谢谢,
稻谷
答案 0 :(得分:2)
我知道这与您的问题没有直接关系,但这实际上可以解决您的问题。通过使用RESTEasy Spring Boot启动程序将RESTEasy用作JAX-RS实现,可以构建Spring Boot REST应用程序:
<强> com.paypal.springboot:RestEasy的弹簧引导起动强>
答案 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);
谢谢, 稻谷