爲了將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。
爲什麼我們需要'MyApplication'?當我創建'MYApplication'時,它顯示一些錯誤。我們是否需要額外的依賴性? – nilashan
顯示什麼樣的錯誤? – geoand
當我將這些代碼放入'MyApplication'時,它顯示了紅色的下劃線。 '寄存器(JerseyResource.class); register(SpringSingletonResource.class); register(SpringRequestResource.class); register(CustomExceptionMapper.class); ' – nilashan