2014-07-21 107 views
2

我試圖用JAX-RS,Spring,Hibernate,Maven和JPA做一個項目。我正在關注這個article作爲參考。這個項目在Spring MVC中。我對Spring MVC非常陌生。我試圖將其轉換爲JAX-RS。我有什麼重要的改變呢?將Spring MVC項目轉換爲JAX-RS

我注意到在Spring MVC中我們使用的主要變化如下:@RequestMapping("/accounts/{username}")

但是在JAX-RS中我們使用這種方式。 @Path("/accounts/{username}")

因此,如果我這樣做的變化,我們必須做的其他關鍵變化是什麼?

回答

2

爲了將Spring MVC控制器移植到JAX-RS控制器,您需要做的最基本的事情是提供Spring和您的JAX-RS提供者並進行集成。一種方法是對web.xml進行適當更改。

假設你正在使用澤西2.x和3.x的春天,在web.xml會是什麼樣子:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <module-name>helloworld-spring</module-name> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:applicationContext.xml</param-value> 
    </context-param> 

    <servlet> 
     <servlet-name>SpringApplication</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>some.package.MyApplication</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>SpringApplication</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

然後MyApplication會是什麼樣子:

package some.package; 

import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.server.spring.scope.RequestContextFilter; 


public class MyApplication extends ResourceConfig { 


    public MyApplication() { 
     register(RequestContextFilter.class); 
     register(JerseyResource.class); 
     register(SpringSingletonResource.class); 
     register(SpringRequestResource.class); 
     register(CustomExceptionMapper.class); 
    } 
} 

您還需要依賴

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-spring3</artifactId> 
    <version>2.10.1</version> 
</dependency> 

除了其他Spring 3和Jersey 2 dependenc IES。

一旦你擺脫困境,你可以開始轉換控制器。

例如:

@Path("admin") 
@Component 
public class AdminController { 

     @Autowired 
     private SchoolService service; 


     @Path("load-home-page") 
     @GET 
     public String loadHomePage(Map model){ 
      return "admin/index"; 
     } 

     //the rest of the code accordingly 
} 

春,新澤西州的集成文檔是here,而一個完整的例子可以發現here

就我個人而言,如果你真的沒有一個令人信服的理由來選擇Jersey over Spring MVC,我會選擇Spring MVC而不是Jersey。

+0

爲什麼我們需要'MyApplication'?當我創建'MYApplication'時,它顯示一些錯誤。我們是否需要額外的依賴性? – nilashan

+1

顯示什麼樣的錯誤? – geoand

+0

當我將這些代碼放入'MyApplication'時,它顯示了紅色的下劃線。 '寄存器(JerseyResource.class); register(SpringSingletonResource.class); register(SpringRequestResource.class); register(CustomExceptionMapper.class); ' – nilashan