2015-07-30 28 views
6

Ho una vecchia applicazione web (servlet puro, senza Spring) che voglio eseguire come fat-jar. Questa app fornisce molti servizi REST. Non voglio modificare il vecchio codice.
Come configurare l'app Spring-Boot per continuare a utilizzare RestEasy?Come configurare l'app Spring-Boot per continuare a utilizzare RestEasy?

+0

La tua vecchia app di primavera utilizza la molla configurata tramite xml? Puoi provare a creare una classe Configuration che importa la tua configurazione xml. @Configuration @ImportResource ({"application-context.xml"}) classe pubblica Config {} –

+0

Domanda correlata: [Integrazione spring-boot con RESTEasy] (http://stackoverflow.com/questions/36730237/integrating-spring -boot-con-RESTEasy). –

risposta

5

È possibile utilizzare il dispositivo di avviamento a molla RESTEasy. Ecco come si fa:

Aggiunta POM dipendenza

Aggiungere la dipendenza Maven qui sotto al tuo file dell'applicazione pom Primavera di avvio.

<dependency> 
    <groupId>com.paypal.springboot</groupId> 
    <artifactId>resteasy-spring-boot-starter</artifactId> 
    <version>2.1.1-RELEASE</version> 
    <scope>runtime</scope> 
</dependency> 

Registrazione classi di applicazione JAX-RS

Basta definire la classe di applicazione JAX-RS (una sottoclasse di Application) come un chicco di primavera, e sarà registrato automaticamente. Vedi l'esempio qui sotto. Vedere la sezione metodi di registrazione dell'applicazione JAX-RS in How to use RESTEasy Spring Boot Starter per ulteriori informazioni.

package com.test; 

import org.springframework.stereotype.Component; 
import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@Component 
@ApplicationPath("/sample-app/") 
public class JaxrsApplication extends Application { 
} 

Registrazione risorse JAX-RS e fornitori

Basta definiscono come i fagioli di primavera, e saranno registrati automaticamente. Si noti che le risorse JAX-RS possono essere singleton o richieste scope, mentre i provider JAX-RS devono essere singleton.

Further information at the project GitHub page.

2

Non è stato così difficile. Ho semplicemente riscritto la configurazione dal mio vecchio web.xml usando le annotazioni Spring.

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<Object> singletons = new HashSet<Object>(); 

    public MyRESTApplication() { 
      this.init(); 
    } 

    protected void init() { 
       //TODO: Register your Rest services here: 
       // this.singletons.add(YourService.class); 
    } 

    @Override 
    public Set<Object> getSingletons() { 
      return singletons; 
    } 
}