另一个答案不会像Spring bean那样拥有您的资源,这种自动配置将正确地集成它们:
配置类:
@Configuration@ConditionalOnWebApplicationpublic class RestEasyAutoConfigurer { private Environment environment; @Bean(name = "resteasyDispatcher") public ServletRegistrationBean resteasyServletRegistration() { ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HttpServletDispatcher(), getPrefix() + "/*"); registrationBean.setInitParameters(ImmutableMap.of("resteasy.servlet.mapping.prefix", "/rs/")); // set prefix here registrationBean.setLoadonStartup(1); return registrationBean; } @Bean(destroyMethod = "cleanup") public static RestEasySpringInitializer restEasySpringInitializer() { return new RestEasySpringInitializer(); } @Bean // use Spring Boot configured Jackson public CustomResteasyJackson2Provider jackson2Provider(ObjectMapper mapper) { return new CustomResteasyJackson2Provider(mapper); } public static class RestEasySpringInitializer implements ServletContextInitializer, ApplicationContextAware, BeanFactoryPostProcessor { private ResteasyDeployment deployment; private ConfigurableApplicationContext applicationContext; private ConfigurableListableBeanFactory beanFactory; public void cleanup() { deployment.stop(); } @Override public void onStartup(ServletContext servletContext) throws ServletException { ListenerBootstrap config = new ListenerBootstrap(servletContext); deployment = config.createDeployment(); deployment.start(); servletContext.setAttribute(ResteasyProviderFactory.class.getName(), deployment.getProviderFactory()); servletContext.setAttribute(Dispatcher.class.getName(), deployment.getDispatcher()); servletContext.setAttribute(Registry.class.getName(), deployment.getRegistry()); SpringBeanProcessor processor = new SpringBeanProcessor(deployment.getDispatcher(), deployment.getRegistry(), deployment.getProviderFactory()); processor.postProcessBeanFactory(beanFactory); applicationContext.addApplicationListener(processor); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = (ConfigurableApplicationContext) applicationContext; } }}
和Jackson提供商:
@Provider@Consumes({"application/*+json", "text/json"})@Produces({"application/*+json", "text/json"})public class CustomResteasyJackson2Provider extends ResteasyJackson2Provider { private ObjectMapper mapper; public CustomResteasyJackson2Provider(ObjectMapper mapper) { this.mapper = mapper; } @Override public ObjectMapper locateMapper(Class<?> type, MediaType mediaType) { return Optional.ofNullable(_mapperConfig.getConfiguredMapper()).orElse(mapper); } }
注意:这是Spring Boot 1.3.3 / RESTEasy 3.0.16的有效配置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)