前兩章已經寫了如何使用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
服務器端:
客戶端: