前两章已经写了如何使用jersey搭建REST接口服务器,本章将简单讲解如何使用jersey+Spring搭建REST接口服务器。 java
一、服务器 web
1.1 导入所需JAR包 spring
jersey相关包的maven依赖 json
<!-- 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 api
<?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; } }
二、客户端(相似章二) restful
2.1 导入JAR包 app
2.2 编码 maven
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(); } } }
运行结果: post
服务器端:
客户端: