jersey是一种RestFul Webservice开发框架,作为JSR311的开源实现,替代了原有的基于SOAP的Web服务。jersey提供了更为简洁的API,提供了更为简洁的开发模式。
在实际应用中,将基于maven构建开发环境,主要其他工具包括:jersey1.8、Junit4、jersey-json。使用webservice访问实现对数据库的CRUD模拟操作。
pom.xml核心片段:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.8</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.8</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.8</version> </dependency> <!-- Json --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>1.18</version> </dependency> <dependency> <groupId>com.owlike</groupId> <artifactId>genson</artifactId> <version>0.99</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.2</version> </dependency> </dependencies>
编写Model类,用于传输数据,@XmlRootElement注解用于在以XML格式返回数据时,将Bean作为根节点:
package com.jersey.bean; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Student { private int id; private String name; private String 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; } public Student(){} public Student(int id, String name, String dept) { super(); this.id = id; this.name = name; this.dept = dept; } }
使用jersey核心API构建WebService类。其中,list请求返回的数据格式是json,需要使用到genson的支持,这个工具可以将Java集合类绑定为特定的Json格式,从而使webservice访问请求响应json格式的数据。
package com.jersey.ws; 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 org.apache.log4j.Logger; import com.jersey.bean.Student; @Path("/students") public class RestWs { private static Logger logger = Logger.getLogger(RestWs.class); private static int index = 1; private static Map<Integer,Student> studentMap = new HashMap<Integer, Student>(); public RestWs(){ if(studentMap.size()==0){ studentMap.put(index, new Student(index++,"Askok","SC")); studentMap.put(index, new Student(index++,"Kloki","KONER")); } } @GET @Path("{studentid}") @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) public Student getData(@PathParam("studentid")int studentid){ if(studentMap.containsKey(studentid)){ return studentMap.get(studentid); }else{ return new Student(-1,"NULL","NULL"); } } @GET @Path("list") @Produces(MediaType.APPLICATION_JSON) public List<Student> getList(){ List<Student> list = new ArrayList<Student>(); list.addAll(studentMap.values()); return list; } @POST @Path("add") @Produces("text/plain") public String addStudent(@FormParam("name") String name, @FormParam("dept") String dept){ studentMap.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 studentid){ logger.info("Delete student id at:"+studentid); Student del = studentMap.remove(studentid); if(del==null){ return "failed"; }else{ return "Student:"+del.getName()+"has been deleted"; } } @PUT @Path("put") @Produces("text/plain") public String putStudent(@QueryParam("studentid") int studentid, @QueryParam("name") String name, @QueryParam("dept") String dept){ logger.info("Add sudent, it's id:"+studentid); if(studentMap.containsKey(studentid)){ return "Can't add same student."; }else{ studentMap.put(studentid, new Student(studentid, name, dept)); } return "Student "+name+" has been added"; } }
注意,
修改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> <servlet> <servlet-name>jerseyws</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.jersey.ws</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>jerseyws</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
对GET和POST可以通过url访问及表单post提交进行测试。
对PUT和DELETE的客户端单元测试代码:
package test; import javax.ws.rs.core.MultivaluedMap; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; 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; /** * @ClassName: TestPD * @Description: (这里用一句话描述这个类的作用) * @author hao1.yan * @date 2015年11月19日 下午3:25:58 */ @RunWith(BlockJUnit4ClassRunner.class) public class TestPD { private static final String BASE_URL = "http://localhost:8080/jersey/rest/students"; @Test public void testDelete(){ Client client = Client.create(); WebResource resource = client.resource(BASE_URL+"/delete/1"); ClientResponse response = resource.delete(ClientResponse.class); System.out.println("Response with a status of:"+response.getStatus()+","+response.getHeaders().toString()); } @Test public void testPut(){ Client client = Client.create(); WebResource resource = client.resource(BASE_URL+"/put"); MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl() ; queryParams.add("studentid", "4"); queryParams.add("name", "Klossd"); queryParams.add("dept", "newPL"); ClientResponse response = resource.queryParams(queryParams).put(ClientResponse.class,"foo:test"); System.out.println("Respone a status:"+response.getStatus()); } }
整个Webservice开发完成后,使用的基准URL是BASE_URL所定义的值,在访问其他资源时,只需要追加特定的路径和参数即可。
相关推荐
- **工具**:Jersey作为开发REST服务的工具,可能与Maven或Gradle构建系统一起使用,帮助管理和打包应用,也可能涉及到IDE(如Eclipse或IntelliJ IDEA)中的集成和调试技巧。 **文件名称列表:jersey api调用方式...
【标题】"Jersey RESTful WebService框架学习(一)" 在Web服务开发中,RESTful API已经成为主流,它强调资源的表示和交互,通过HTTP协议进行通信。Jersey是Java平台上的一个开源框架,专门用于构建RESTful服务,它是...
在本篇中,我们将深入探讨如何使用Maven搭建一个基于Jersey实现的RESTful Web服务。Jersey是Java EE平台下的一个开源项目,它提供了对JAX-RS(Java API for RESTful Web Services)规范的全面支持,让我们能够轻松...
在IT行业中,RESTful WebService框架是开发网络应用的重要工具,Jersey作为Java平台上的一个开源框架,专门用于实现RESTful服务。本文将深入探讨如何巧妙利用Jersey框架解决文件上传时可能出现的乱码问题,同时也会...
总结来说,这个项目结合了Spring4的依赖注入和事务管理、MyBatis3的数据库操作、Jersey的RESTful服务实现以及Maven的依赖管理,构建了一个完整的、基于RESTful的Web服务系统。通过JSON数据格式,实现了高效的数据...
标题中的"jersey+spring rest webservice web maven"是一个基于Java开发的RESTful Web服务架构,它结合了几个关键的技术组件。让我们深入探讨每个部分: 1. **Jersey**: Jersey是Java RESTful Web服务(JAX-RS)...
这个项目包含的使用说明文档将指导你完成这些步骤,帮助你快速理解和实践Java + RESTful + Jersey Web服务的开发。通过学习和实践,你将能够熟练地构建和调用RESTful服务,提高你的后端开发技能。记得在实际开发中,...
"restful-webService模板"可能包含了一些基本的类和配置文件,如资源类、配置文件(如web.xml)、Maven或Gradle构建文件等,为快速搭建REST服务提供起点。开发者可以根据自己的需求,扩展这些模板,添加具体的功能...
RESTful Web服务是一种基于HTTP协议的轻量级Web服务设计风格,它强调...提供的压缩包文件揭示了一个典型的Java Maven项目的结构,其中包含了源代码、构建配置以及第三方库,这些都是开发和部署RESTful服务所必需的。
REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议进行通信,采用无状态的方式,利用标准的方法(如GET、POST等),通过URL地址指定资源并进行操作。RESTful Web服务是...
Jersey是JAX-RS(Java API for RESTful Web Services)的参考实现,简化了REST服务的开发。要开始使用Jersey,首先需要在项目中引入其依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...
REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,强调的是资源的概念,通过统一的接口进行交互。RESTful Web 服务使用 HTTP 方法(GET、POST、PUT、DELETE 等)来操作资源,具有无...
在本示例中,我们使用的工具有jersey-1.17.jar,这是一个Java实现的RESTful服务框架,由Sun Microsystems(现Oracle公司)开发。Jersey提供了一套全面的API和工具,使得开发者可以轻松地创建和部署RESTful服务。 ...
对于RESTful服务,开发者可能需要使用`<exec>`任务执行特定的命令行工具,如`mvn`来执行maven插件,如`jersey-maven-plugin`来生成服务接口。 标签中的“源码”暗示这篇博客可能涉及到了源代码级别的操作,例如,...
在本文中,我们将探讨如何使用Maven、Jersey和MongoDB快速构建RESTful Web服务。首先,Jersey作为JAX-RS(JSR 311)的开源参考实现,被广泛用于创建RESTful接口。它不仅提供了标准的API,还允许开发者通过扩展机制...
### REST资源指南知识点详解 #### 一、REST概念与架构 **REST(Representational State Transfer)** 是一种软件架构风格,特别...对于开发者而言,掌握 REST 相关的知识点对于提升工作效率和开发质量具有重要意义。
例如,使用Jersey或Apache CXF库可以轻松地创建和消费RESTful服务。 其次,Hessian是一种二进制Web服务协议,由Caucho公司开发。Hessian的目标是提供快速、轻量级的远程调用机制。与REST相比,Hessian的数据交换...
通过本文,读者可以了解到基于Restful风格的API设计和实现,jersey框架的使用和swagger的集成。 一、项目目标 在本项目中,作者使用了动静分离的架构,即客户端和服务器端的分离,客户端可以是IOS、android或者...
项目描述:管理电视节目的RESTful Webservice 使用的框架: Jersey、Jersey-Test、JUnit 项目包类型: WAR 使用的 JRE: Java SE-1.6 描述 用于查看和管理电视节目数据的 RESTful Web 服务 API。 数据可能如下所...
本示例是使用Java EE平台来实现一个RESTful Web Service的简单应用,名为"RESTful_WS_Example",并且已经创建了版本分支v1.1,这表明项目正在进行持续的开发和改进。 首先,我们来深入理解RESTful架构原则: 1. ...