`
bjtale
  • 浏览: 29742 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

使用jersey和maven开发RESTFul WebService

阅读更多

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 restful webservice集成以及使用

    - **工具**:Jersey作为开发REST服务的工具,可能与Maven或Gradle构建系统一起使用,帮助管理和打包应用,也可能涉及到IDE(如Eclipse或IntelliJ IDEA)中的集成和调试技巧。 **文件名称列表:jersey api调用方式...

    Jersey RESTful WebService框架学习(一)

    【标题】"Jersey RESTful WebService框架学习(一)" 在Web服务开发中,RESTful API已经成为主流,它强调资源的表示和交互,通过HTTP协议进行通信。Jersey是Java平台上的一个开源框架,专门用于构建RESTful服务,它是...

    Jersey RESTful WebService框架学习(八)maven搭建

    在本篇中,我们将深入探讨如何使用Maven搭建一个基于Jersey实现的RESTful Web服务。Jersey是Java EE平台下的一个开源项目,它提供了对JAX-RS(Java API for RESTful Web Services)规范的全面支持,让我们能够轻松...

    巧用 Jersey RESTful WebService框架解决文件上传乱码

    在IT行业中,RESTful WebService框架是开发网络应用的重要工具,Jersey作为Java平台上的一个开源框架,专门用于实现RESTful服务。本文将深入探讨如何巧妙利用Jersey框架解决文件上传时可能出现的乱码问题,同时也会...

    spring4+myabtis3+jersey(restful风格的webservice)

    总结来说,这个项目结合了Spring4的依赖注入和事务管理、MyBatis3的数据库操作、Jersey的RESTful服务实现以及Maven的依赖管理,构建了一个完整的、基于RESTful的Web服务系统。通过JSON数据格式,实现了高效的数据...

    jersey+spring rest webservice web maven

    标题中的"jersey+spring rest webservice web maven"是一个基于Java开发的RESTful Web服务架构,它结合了几个关键的技术组件。让我们深入探讨每个部分: 1. **Jersey**: Jersey是Java RESTful Web服务(JAX-RS)...

    java+restful+Jersey+webservice 远程调用

    这个项目包含的使用说明文档将指导你完成这些步骤,帮助你快速理解和实践Java + RESTful + Jersey Web服务的开发。通过学习和实践,你将能够熟练地构建和调用RESTful服务,提高你的后端开发技能。记得在实际开发中,...

    restful-webService

    "restful-webService模板"可能包含了一些基本的类和配置文件,如资源类、配置文件(如web.xml)、Maven或Gradle构建文件等,为快速搭建REST服务提供起点。开发者可以根据自己的需求,扩展这些模板,添加具体的功能...

    restful web service

    RESTful Web服务是一种基于HTTP协议的轻量级Web服务设计风格,它强调...提供的压缩包文件揭示了一个典型的Java Maven项目的结构,其中包含了源代码、构建配置以及第三方库,这些都是开发和部署RESTful服务所必需的。

    rest webservice guide.pdf

    REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议进行通信,采用无状态的方式,利用标准的方法(如GET、POST等),通过URL地址指定资源并进行操作。RESTful Web服务是...

    使用Jersey框架搭建Rest服务

    Jersey是JAX-RS(Java API for RESTful Web Services)的参考实现,简化了REST服务的开发。要开始使用Jersey,首先需要在项目中引入其依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...

    jersey-archive-1.19.zip

    REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,强调的是资源的概念,通过统一的接口进行交互。RESTful Web 服务使用 HTTP 方法(GET、POST、PUT、DELETE 等)来操作资源,具有无...

    restfulwebservice发布服务接口

    在本示例中,我们使用的工具有jersey-1.17.jar,这是一个Java实现的RESTful服务框架,由Sun Microsystems(现Oracle公司)开发。Jersey提供了一套全面的API和工具,使得开发者可以轻松地创建和部署RESTful服务。 ...

    Ant部署WebService服务

    对于RESTful服务,开发者可能需要使用`&lt;exec&gt;`任务执行特定的命令行工具,如`mvn`来执行maven插件,如`jersey-maven-plugin`来生成服务接口。 标签中的“源码”暗示这篇博客可能涉及到了源代码级别的操作,例如,...

    Maven+jersey快速构建RESTfulWebservice集成mongodb

    在本文中,我们将探讨如何使用Maven、Jersey和MongoDB快速构建RESTful Web服务。首先,Jersey作为JAX-RS(JSR 311)的开源参考实现,被广泛用于创建RESTful接口。它不仅提供了标准的API,还允许开发者通过扩展机制...

    REST资源指南

    ### REST资源指南知识点详解 #### 一、REST概念与架构 **REST(Representational State Transfer)** 是一种软件架构风格,特别...对于开发者而言,掌握 REST 相关的知识点对于提升工作效率和开发质量具有重要意义。

    采用(rest ,hession,cxf)几种技术实现webservice

    例如,使用Jersey或Apache CXF库可以轻松地创建和消费RESTful服务。 其次,Hessian是一种二进制Web服务协议,由Caucho公司开发。Hessian的目标是提供快速、轻量级的远程调用机制。与REST相比,Hessian的数据交换...

    基于Rest的API解决方案(jersey与swagger集成)

    通过本文,读者可以了解到基于Restful风格的API设计和实现,jersey框架的使用和swagger的集成。 一、项目目标 在本项目中,作者使用了动静分离的架构,即客户端和服务器端的分离,客户端可以是IOS、android或者...

    TVRestApp:电视节目 RESTful 服务

    项目描述:管理电视节目的RESTful Webservice 使用的框架: Jersey、Jersey-Test、JUnit 项目包类型: WAR 使用的 JRE: Java SE-1.6 描述 用于查看和管理电视节目数据的 RESTful Web 服务 API。 数据可能如下所...

    RESTful_WS_Example

    本示例是使用Java EE平台来实现一个RESTful Web Service的简单应用,名为"RESTful_WS_Example",并且已经创建了版本分支v1.1,这表明项目正在进行持续的开发和改进。 首先,我们来深入理解RESTful架构原则: 1. ...

Global site tag (gtag.js) - Google Analytics