前两章已经写了如何使用jersey搭建REST接口服务器,本章将简单讲解如何使用jersey+Spring搭建REST接口服务器。
1、服务器
1.1 导入所需JAR包

jersey相关包的maven依赖
<!-- jersey客户端需要的包 -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<!-- jersey服务器端需要的包 -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.18.1</version>
</dependency>
<!-- genson用于帮助服务器处理JSON数据的重要JAR包 -->
<dependency>
<groupId>com.owlike</groupId>
<artifactId>genson</artifactId>
<version>1.3</version>
</dependency>
<!-- jersey和spring继承需要的JAR包 -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
1.2 编写Spring配置文件:spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<context:component-scan base-package="com.sunnysoft.rest" />
</beans> 这里的spring配置文件很简单,因为我们现在是写demo,所以这里只需要启用spring的注解扫描就可以了。
1.3 编写web.xml,其实就博主浅显的理解,spring和jersey整合,也就是web.xml中有变化,当然这只是在demo的级别,深入的话,还有待学习。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance http://www.springmodules.org/schema/cache/springmodules-cache.xsd http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd
">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring*.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>Jersey REST Service</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>com.sunnysoft.rest.controller</param-value>
</init-param>
<init-param>
<param-name>
com.sun.jersey.api.json.POJOMappingFeature
</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app> 1.4 编写服务器接口入口
package com.sunnysoft.rest.controller;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
import com.sunnysoft.rest.model.User;
/**
* jersey+Spring 搭建服务器 demo控制器
* @author ll
* @version $Id: DemoController.java, v 0.1 Apr 21, 2015 10:29:10 AM ll Exp $
*/
@Path("/demo")
@Component
public class DemoController {
//@Path 定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/Jersey/rest/demo
//@GET:这意味着以下方法可以响应 HTTP GET 方法。
//@Produces:描述响应内容的格式
//@Consumes:声明该方法使用什么样的数据格式。
@POST
@Path("/getuser")
@Produces(MediaType.APPLICATION_JSON)// json格式响应给客户端
@Consumes(MediaType.APPLICATION_JSON)// json格式接收客户端数据
public User getUser(User user) {
System.out.println("Get back the user that client sent to server.");
System.out.println("User's information is : name = " + user.getName() + " , gender = "
+ user.getGender());
System.out.println("Now, change the gender to unknown.");
user.setGender("unknown");
System.out.println("Now user's information is : name = " + user.getName() + " , gender = "
+ user.getGender());
return user;
}
}
2、客户端(类似章二)
2.1 导入JAR包

2.2 编码
package com.eya.restful.restTest;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import net.sf.json.JSONObject;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
/**
*
* @author ll Develop on : 2015年4月20日
*/
public class RestTest {
public static void main(String[] args) {
String path = "http://localhost:8090/RestSpringServer/rest/demo/getuser";
Client client = null;
JSONObject param = new JSONObject();
param.put("name", "Alice");
param.put("gender", "female");
try {
URI uri = new URI(path);
client = Client.create();
WebResource webResource = client.resource(uri);
ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(
ClientResponse.class, param.toString());
System.out.println(response.getStatus());
System.out.println("result : " + response.getEntity(String.class));
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
服务器端:

客户端:

来源:oschina
链接:https://my.oschina.net/u/1158633/blog/404370