2016-08-31 2 views
1

학습을 위해 (스프링 부팅은 훌륭하고 매직 ..), Jersey를 사용하여 웹 응용 프로그램을 설정하려고합니다. 및 스프링 (DI 용). 나는 스프링 XML 구성만으로 작동하도록 만들었다. 내가 ResourceConfigweb.xml 구성이없는 @Configuration에서 Jersey 2/Spring 4로드 빈을 만드는 방법

@ApplicationPath("/api") 
public class JerseyWebApp extends ResourceConfig { 

    public JerseyWebApp() { 
     packages("com.company.controller"); 
    } 
} 

내 HelloController.java

@Path("/hello") 
public class HelloController { 

    private HelloService helloService; 

    @Autowired 
    public HelloController(HelloService helloService) { 
     this.helloService = helloService; 
    } 

    @GET 
    public String hello() { 
     return helloService.sayHello(); 
    } 
} 

내 HelloService.java

@Component 
@Scope(value = BeanDefinition.SCOPE_PROTOTYPE) 
public class HelloService { 

    public String sayHello() { 
    return "hello from jersey webapp"; 
    } 
} 

내 스프링의 applicationContext.xml을 확장 한

(210)는 또한

<properties> 
    <jersey2.version>2.23.2</jersey2.version> 
    <jaxrs.version>2.0.1</jaxrs.version> 
    <spring.version>4.3.2.RELEASE</spring.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>${jersey2.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.ext</groupId> 
     <artifactId>jersey-spring3</artifactId> 
     <version>${jersey2.version}</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>spring-context</artifactId> 
       <groupId>org.springframework</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>spring-beans</artifactId> 
       <groupId>org.springframework</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>spring-core</artifactId> 
       <groupId>org.springframework</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>spring-web</artifactId> 
       <groupId>org.springframework</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>jersey-server</artifactId> 
       <groupId>org.glassfish.jersey.core</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId> 
        jersey-container-servlet-core 
       </artifactId> 
       <groupId>org.glassfish.jersey.containers</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>hk2</artifactId> 
       <groupId>org.glassfish.hk2</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <!--Spring 4--> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
    </dependency> 
</dependencies> 

는 것이 가능 @Configuration 클래스를 통해 콩을로드 저지를 얻기 위해 또는 내가 전체 응용 프로그램을 부트 스트랩 봄 웹/MVC를 사용하여 고려하여야한다인가 내 치어 파일 첨부.

답변

2

파일 org.glassfish.jersey.server.spring.SpringWebApplicationInitializer.java에서 "어떤 이유"에 대한 라이브러리 jersey-spring3는 클래스 패스 자원을 찾고 기본입니다 :

sc.setInitParameter("contextConfigLocation", "classpath:applicationContext.xml"); 

을 그리고 자바 기반의 봄 구성을 지원하지 않습니다. 발견 된 미해결 문제는 here입니다.

스프링 DI로 자바 기반 주석 구성을 등록하려면 해결 방법과 ServletContainerInitializer의 맞춤 구현을 사용하여 웹 응용 프로그램을 부트 스트랩해야했습니다.

JerseyServletContainerInitializer.java

public class JerseyServletContainerInitializer implements ServletContainerInitializer { 

    @Override 
    public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException { 

    //Register spring configurations 
    AnnotationConfigWebApplicationContext springContext = new AnnotationConfigWebApplicationContext(); 
    springContext.register(SpringConfig.class, JPAConfig.class); 
    servletContext.addListener(new RequestContextListener()); 
    servletContext.addListener(new ContextLoaderListener(springContext)); 
    springContext.setServletContext(servletContext); 

    //Register Jersey servlet 
    ServletRegistration.Dynamic servletRegistration = servletContext.addServlet("JerseyServlet", new ServletContainer()); 
    servletRegistration.addMapping("/api/*"); 
    servletRegistration.setLoadOnStartup(1); 
    servletRegistration.setInitParameter("javax.ws.rs.Application", JerseyResourceConfig.class.getName()); 
    } 
} 

JerseyResourceConfig.java

public class JerseyResourceConfig extends ResourceConfig { 

    public JerseyResourceConfig() { 
    packages("com.company.controller"); 
    } 
} 
+0

주위에 아주 좋은 작품 : 여기에 광산의 : https://github.com/bric3/jersey2-spring4-example – Brice

관련 문제