我试图用JAX-RS,Spring,Hibernate,Maven和JPA做一个项目。我跟随此article作为参考。这个项目是在Spring MVC中。我对Spring MVC很新。我试图将其转换为JAX-RS。我有什么重要的改变?
主要的变化我注意到在Spring MVC中我们这样使用:@RequestMapping("/accounts/{username}")
。
但是在JAX-RS中我们这样使用。 @Path("/accounts/{username}")
因此,如果我进行这样的更改,我们必须对此进行哪些其他关键更改?
答案 0 :(得分:2)
为了将Spring MVC控制器移植到JAX-RS控制器,您需要做的最基本的事情是在Spring和您的JAX-RS提供程序之间提供和集成。一种方法是对web.xml
进行适当的更改。
假设您使用的是Jersey 2.x和Spring 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之外的其他依赖项。
一旦你解决了这个问题,就可以开始改造控制器了。
例如:
@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
}
Spring-Jersey集成的文档是here,而可以找到完整的示例here。
如果你真的没有一个令人信服的理由选择Jersey而不是Spring MVC,我个人会选择Spring MVC而不是Jersey。