2015-01-30 4 views
3


Мы используем Spring Boot для тестов интеграции и RESTEasy для URL REST. Я настроил ExceptionMapper для исключения BadRequestException, поскольку я добавил тестовый пример для исключения, которое было отправлено при отправке плохих запросов. Чтобы подавить исключение RESTEasy в результате, я добавил BadRequestExceptionHandler, который расширяет ExceptionMapper RESTEasy. Я использовал «@SpringBootApplication», но добавил «@ComponentScan» с includeFilters, задав тип ANNOTATION и значение для Provider.class. Я пометил класс обработчика как @Component, и поэтому Spring может создать компонент (работа с автоустановкой), но RESTEasy не выбирает этот обработчик, и я продолжаю видеть исключение в журналах.RESTEasy ExceptionMapper не работает с Spring Boot

Может кто-нибудь указать, что я делаю неправильно?

@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 { 
... 
} 

Спасибо,
Пэдди

ответ

1

Я использую пользовательский Undertow встроенного сервера, используя пользовательское JaxRs класс приложения (уже объявленный до начала моей задачи, поэтому чувствовало себя лучше использовать его). Поэтому мне пришлось установить фабрику поставщиков, настроенную с моими настраиваемыми агентами исключения, и установить фабрику поставщика на объект развертывания Resteasy. Вот код:

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

Спасибо, Пэдди

2

Я знаю, что это не имеет прямого отношения к вашему вопросу, но это действительно может решить вашу проблему. Можно создавать приложения Spring загрузки REST с помощью Resteasy в реализации JAX-RS с помощью этого Resteasy Spring загрузки стартера:

com.paypal.springboot: Resteasy-весна-загрузки-стартер

ВИДЕТЬ сайт проекта: https://github.com/paypal/resteasy-spring-boot/

Смежные вопросы