使用Maven和Jersey Framework开发REST风格Web Service
来源:互联网 发布:淘宝客qq群拉人 编辑:程序博客网 时间:2024/05/21 17:09
本文演示环境为eclipse + Maven插件 + Jersey framework。
1. 修改pom.xml,添加Maven相应依赖库
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.johnf.app</groupId> <artifactId>jersy-rest-methods</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>jersy-rest-methods Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <jersey.version>1.19</jersey.version> <spring.version>4.1.4.RELEASE</spring.version> </properties> <dependencies> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <!-- jersey --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>${jersey.version}</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>${jersey.version}</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>${jersey.version}</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>${jersey.version}</version> </dependency> <!-- jersey-spring --><dependency><groupId>com.sun.jersey.contribs</groupId><artifactId>jersey-spring</artifactId><version>${jersey.version}</version><!-- 去除jersey自带的低版本spring --><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></exclusion></exclusions></dependency> <!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency> </dependencies> <build> <finalName>jersy-rest-methods</finalName> </build></project>
2. 添加基本POJO类Student:
package com.johnfnash.app.jersey.domain;import java.io.Serializable;import javax.xml.bind.annotation.XmlRootElement;/** * 学生实体类 */@XmlRootElement //注意:需要加上@XmlRootElement注解,产生xml响应时需要用到public class Student implements Serializable {private static final long serialVersionUID = 435012662554501777L;/** id */private int id;/** 姓名 */private String name;/** 系 */private String dept;public Student() {}public Student(int id, String name, String dept) {this.id = id;this.name = name;this.dept = dept;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDept() {return dept;}public void setDept(String dept) {this.dept = dept;}}
3. 添加一个REST web服务实现类StudentRest:
package com.johnfnash.app.jersey.rest;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.ws.rs.DELETE;import javax.ws.rs.FormParam;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.PUT;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.QueryParam;import javax.ws.rs.core.MediaType;import com.johnfnash.app.jersey.domain.Student;@Path("/students")public class StudentRest { private static int index = 1; private static Map<Integer, Student> stuMap = new HashMap<Integer, Student>(); private final static String OK = "ok"; private final static String FAILED = "failed"; public StudentRest() { if(stuMap.size()==0) { stuMap.put(index, new Student(index++, "Frank", "CS")); stuMap.put(index, new Student(index++, "Jersey", "Math")); } } @GET @Path("{studentId}") @Produces({MediaType.APPLICATION_JSON}) public Student getStudentById(@PathParam("studentId")int stuId) { if(stuMap.containsKey(stuId)) { return stuMap.get(stuId); } else { return new Student(0, "Nil", "Nil"); } } @GET @Path("list") @Produces({MediaType.APPLICATION_XML}) public List<Student> getAllStudents() { List<Student> stuList = new ArrayList<Student>(); stuList.addAll(stuMap.values()); return stuList; } @POST @Path("add") @Produces("text/plain") public String addStudent(@FormParam("name") String name, @FormParam("dept") String dept) { stuMap.put(index, new Student(index++, name, dept)); return String.valueOf(index-1); } @DELETE @Path("delete/{studentId}") @Produces("text/plain") public String deleteStudent(@PathParam("studentId") int stuId) { Student removed = stuMap.remove(stuId); if(removed==null) { return FAILED; } else { return OK; } } @PUT @Path("put") @Produces("text/plain") public String putStudent(@QueryParam("studentId") int stuId, @QueryParam("name") String name, @QueryParam("dept") String dept) { if(!stuMap.containsKey(stuId)) { return FAILED; } else { stuMap.put(stuId, new Student(stuId, name, dept)); } return String.valueOf(stuId); } }
4. 修改src/main/webapp/WEB-INF/web.xml文件如下:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <display-name>Archetype Created Web Application</display-name> <!-- spring --> <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> <!-- jersey 配置 --> <servlet> <servlet-name>jersey</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> <!-- rest服务所在位置 --> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.johnfnash.app.jersey.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping></web-app>由于使用了spring,需要在src/main/resources下建一个空的spring配置文件:applicationContext.xml
5. 测试
5.1) 对于GET,可以直接通过浏览器进行测试,在浏览器中直接输入:http://localhost:8080/jerseywstest/rest/students/list, 可以看到返回的XML数据:
<students> <student> <dept>CS</dept> <id>1</id> <name>Frank</name> </student> <student> <dept>Math</dept> <id>2</id> <name>Jersey</name> </student></students>
输入: http://localhost:8080/jersey-rest-methods/rest/students/1,会返回一个学生的信息
{"dept":"CS","id":"1","name":"Frank"}
5.2) 测试POST方法。
添加一个testpost.htm文件
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>add</title></head><body><form action="/jersey-rest-methods/rest/students/add" method="post"><input type="text" name="name" /><br/><input type="text" name="dept" /><br/><input type="submit" /></form></body></html>
提交后你在用list方法就可以看到数据的变化。
5.3) PUT和DELETE方法的测试
package com.johnfnash.app.jersey;import javax.ws.rs.core.MultivaluedMap;import junit.framework.Assert;import org.junit.Test;import com.sun.jersey.api.client.Client;import com.sun.jersey.api.client.ClientResponse;import com.sun.jersey.api.client.WebResource;import com.sun.jersey.core.util.MultivaluedMapImpl;public class StudentRestTest { private final String url = "http://localhost:8080/jersey-rest-methods/rest/students"; @Test public void testDelete() { Client client = Client.create(); WebResource webResource = client.resource(url + "/delete/1"); ClientResponse response = webResource.delete(ClientResponse.class); System.out.println("response for delete: " + response.getEntity(String.class)); Assert.assertEquals(200, response.getStatus()); } @Test public void testPut() { Client client = Client.create(); WebResource webResource = client.resource(url + "/put"); //设置查询参数 MultivaluedMap<String,String> queryParams = new MultivaluedMapImpl(); queryParams.add("studentId", "2"); queryParams.add("name", "testname"); queryParams.add("dept", "testdept"); //请求 ClientResponse response = webResource.queryParams(queryParams).put(ClientResponse.class); System.out.println("response for put: " + response.getEntity(String.class)); Assert.assertEquals(200, response.getStatus()); } }本文参考:http://www.cnblogs.com/bluesfeng/archive/2010/10/28/1863816.html
0 0
- 使用Maven和Jersey Framework开发REST风格Web Service
- Maven和Jersey Framework开发REST风格Web Service
- Maven和Jersey Framework开发REST风格Web Service
- Jersey : Java规范下REST风格Web Service开发框架
- Jersey—— 一个基于Rest风格的Web Service开发框架
- rest web service - jersey . spring3
- 简单介绍使用WCF的Web编程模型开发REST风格的Web Service
- Eclipse+Tomcat+Jersey 编写 REST web service
- 使用Apache CXF搭建REST风格的Web Service
- 开发REST Web Service
- 使用Jersey开发Resful的web Service的hello world
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过Jersey客户端API调用REST风格的Web服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- Jersey客户端API调用REST风格的Web服务
- mybatis实战教程(mybatis in action),mybatis入门到精通
- 这10篇 iOS 热文,你别错过哦
- 1076. Forwards on Weibo
- android socket
- 自定义ProgressBar的进度色彩
- 使用Maven和Jersey Framework开发REST风格Web Service
- 安卓开发:服务的更多技巧--1.使用前台服务
- Eclipse做安卓的时候,button按钮把那个textview文本挡住了
- 文章标题 div 居中的三种方法
- 【GOF23设计模式】_备忘录模式_多点备忘_事务操作_回滚数据底层架构JAVA253
- 反编译apk
- Java中的多线程编程(一)
- 各种排序算法代码
- C/C++中static和extern小结