将SpringBoot与RESTEasy集成

将SpringBoot与RESTEasy集成,第1张

将SpringBoot与RESTEasy集成

另一个答案不会像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的有效配置



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4896114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存