How configure Spring-Boot app to continue to use RestEasy?

后端 未结 2 838
独厮守ぢ
独厮守ぢ 2021-01-05 10:13

I have an old web application (pure servlet, without Spring) that I want to run as fat-jar. This app provides a lot of REST services. I don\'t want to modified old code.

2条回答
  •  耶瑟儿~
    2021-01-05 10:28

    It wasn't so difficult. I simply rewrote configuration from my old web.xml using Spring annotations.

    package kjkrol;
    
    import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
    import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.embedded.ServletContextInitializer;
    import org.springframework.boot.context.embedded.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    
    import javax.servlet.ServletContextListener;
    
    @ComponentScan
    @EnableAutoConfiguration
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
                SpringApplication.run(Application.class, args);
        }
    
        @Bean
        public ServletContextInitializer initializer() {
                return servletContext -> {                      
                        // RestEasy configuration
                        servletContext.setInitParameter("resteasy.scan", "true");
                        servletContext.setInitParameter("resteasy.servlet.mapping.prefix", "/services");
                };
        }    
    
        @Bean
        public ServletContextListener restEasyBootstrap() {
                return new ResteasyBootstrap();
        }
    
        @Bean
        public ServletRegistrationBean restEasyServlet() {
                final ServletRegistrationBean registrationBean = new ServletRegistrationBean();
                registrationBean.setServlet(new HttpServletDispatcher());
                registrationBean.setName("restEasy-servlet");
                registrationBean.addUrlMappings("/services/*");
                registrationBean.addInitParameter("javax.ws.rs.Application", "kjkrol.MyRESTApplication");
                return registrationBean;
        }
    }
    
    
    package kjkrol;
    
    
    import javax.ws.rs.core.Application;
    import java.util.HashSet;
    import java.util.Set;
    
    
    public class MyRESTApplication extends Application {
    
        private final Set singletons = new HashSet();
    
        public MyRESTApplication() {
                this.init();
        }
    
        protected void init() {
                    //TODO: Register your Rest services here:
                    // this.singletons.add(YourService.class);
        }
    
        @Override
        public Set getSingletons() {
                return singletons;
        }
    }
    
        

    提交回复
    热议问题