使用Jersey1.19 + Spring 3 构建REST Web Service时,遇到的bean无法注入的问题。
在之前的文章http://blog.csdn.net/zijia889149650/article/details/48758563中,我说过没有找到Jersey 和 spring的整合方法,在今天的例子中,我是在SSH的架构的基础上整合进的Jersey,所以就避免不了要在service中注入spring管理的bean,以下就是解决的方法:
一、引入jersey-spring-1.9包
需要引入对应版本的jersey-spring 包,具体可以自行到官方网站https://jersey.java.net/ 处下载。
下载完成后复制到WEB-INF/lib 文件夹中即可。
二、修改web.xml
首先需要更改web.xml中的配置,具体请看下面的代码:
<!-- Jersey框架相关内容 -->
<!-- 不使用spring + Jersey 框架整合 --><!--
<servlet>
<servlet-name>RESTfulService</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>RESTfulService</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RESTfulService</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
--><!-- 使用spring + Jersey 框架整合 -->
<servlet>
<servlet-name>jersey-spring</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>RESTfulService</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>jersey-spring</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
三、Java代码
实现bean注入的代码如下:
package RESTfulService;
import java.util.ArrayList;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.spring.Autowire;
import basic.ServiceTO.BasicResult;
import custom.DAO.IDAO.ICustomDAO;
import custom.PO.Custom;
import custom.ServiceTO.CustomResult;
//使用jersey-spring 包中的@Autowire注解,此注解并非spring中的,要求注解的属性有setter方法。
@Autowire
@Path("/CustomService")
public class CustomService {
//不需要使用@Resource注解。
private ICustomDAO customDAOImpl;
@GET
@Path("/XML")
@Produces(MediaType.APPLICATION_XML)
public BasicResult getXML(){
//返回XML类型的数据
CustomResult result = new CustomResult();
ArrayList<Custom> list = customDAOImpl.login("zzj001", "123456");
list.get(0).getCustomLevel().setCustoms(null);
result.setRecords(list);
result.setResultCode("101");
return result;
}
public ICustomDAO getCustomDAOImpl() {
return customDAOImpl;
}
public void setCustomDAOImpl(ICustomDAO customDAOImpl) {
this.customDAOImpl = customDAOImpl;
}
}