原文地址:http://only81.iteye.com/blog/1689537

This section creates a CRUD (Create, Read, Update, Delete) restful web service. It will allow to maintain a list of todos in your web application via HTTP calls.

本章,将调用restful的get,post,delete等相关的操作

首先创建一个bean类,Person类,代码如下:

package sample.hello.resources.bean;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Person {
private String id;
private String name;
private String birthday; public Person() {
} public Person(String id, String name, String birthday) {
this.id = id;
this.name = name;
this.birthday = birthday;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
} }

第二步,创建Person的工厂(单例模式),用户person对象的创建、删除和更新等操作:

package sample.hello.resources.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set; public class PersonFactory {
/**
* 单例模式
*/
private static PersonFactory personFactory = null;
private PersonFactory(){}
public static PersonFactory getInstance(){
if(personFactory==null){
personFactory = new PersonFactory();
}
return personFactory;
}
/**
* 存储person的map
*/
private static Map<String, Person>personProvider = new HashMap<String, Person>(); static{
Person person = new Person();
person.setId("111");
person.setName("小敏");
person.setBirthday("1988-03-21");
personProvider.put("111", person); Person person2 = new Person();
person2.setId("222");
person2.setName("小丰");
person2.setBirthday("1988-04-22");
personProvider.put("222", person2);
}
/**
* 根据id获取对应的person
* @param id
* @return
*/
public Person getPersonById(String id){
return personProvider.get(id);
}
/**
* 添加对应的person到map中
* @param person
*/
public void addPerson(Person person){
personProvider.put(person.getId(), person);
}
/**
* 删除对应的person
* @param id
*/
public void deletePerson(String id){
personProvider.remove(id);
}
/**
* 获取所有的person
* @return
*/
public List<Person>getAllPerson(){
List<Person> persons = new ArrayList<Person>();
Set<String> keys = personProvider.keySet();
for(String key:keys){
persons.add(personProvider.get(key));
}
return persons;
}
}

第三步,创建personResource,并实现相关person的增、删、改操作

package sample.hello.resources;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.xml.bind.JAXBElement; import sample.hello.resources.bean.Person;
import sample.hello.resources.bean.PersonFactory; public class PersonResource { @Context
UriInfo uriInfo;
@Context
Request request;
String id;
public PersonResource(UriInfo uriInfo, Request request, String id) {
this.uriInfo = uriInfo;
this.request = request;
this.id = id;
} @GET
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Person getPerson(){
Person person = PersonFactory.getInstance().getPersonById(id);
if(person==null){
throw new RuntimeException("查到不对id="+id+"的person");
}
return person;
} @GET
@Produces({MediaType.TEXT_XML})
public Person getPersonXML(){
Person person = PersonFactory.getInstance().getPersonById(id);
if(person==null){
throw new RuntimeException("查到不对id="+id+"的person");
}
return person;
} @PUT
@Consumes(MediaType.APPLICATION_XML)
public Response addPerson(JAXBElement<Person>person){
Person per = person.getValue();
return putAndGetResponse(per);
} @DELETE
public void deletePerson(){
Person person = PersonFactory.getInstance().getPersonById(id);
if(person==null){
throw new RuntimeException("Delete: person with " + id + " not found");
}else{
PersonFactory.getInstance().deletePerson(id);
}
} private Response putAndGetResponse(Person person){
Response res;
if(PersonFactory.getInstance().getPersonById(person.getId())!=null){
res = Response.noContent().build();
}else{
res = Response.created(uriInfo.getAbsolutePath()).build();
}
PersonFactory.getInstance().addPerson(person);
return res;
} }

第四步,实现personsResource,实现批量查看,查看数量等操作

package sample.hello.resources;

import java.io.IOException;
import java.util.List; import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import javax.servlet.http.HttpServletResponse; import sample.hello.resources.bean.Person;
import sample.hello.resources.bean.PersonFactory; @Path("/persons")
public class PersonsResource { @Context
UriInfo uriInfo;
@Context
Request request; @GET
@Produces(MediaType.TEXT_XML)
public List<Person> getPersonBrowser() {
List<Person> persons = PersonFactory.getInstance().getAllPerson();
return persons;
} @GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public List<Person> getPersons() {
List<Person> persons = PersonFactory.getInstance().getAllPerson();
return persons;
} @GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public String getCount() {
int count = PersonFactory.getInstance().getAllPerson().size();
return String.valueOf(count);
} @POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void newPerson(@FormParam("id") String id,
@FormParam("name") String name,
@FormParam("birthday") String birthday,
@Context HttpServletResponse servletResponse) throws IOException {
Person person = new Person(id,name,birthday); PersonFactory.getInstance().addPerson(person); servletResponse.sendRedirect("../create_person.html");
} @Path("{person}")
public PersonResource getPerson(@PathParam("person") String id) {
return new PersonResource(uriInfo, request, id);
}
}

创建一个html文件,create_person.html,用户返回html格式数据

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form to create a new resource</title>
</head>
<body>
<form action="../de.vogella.jersey.todo/rest/todos" method="POST">
<label for="id">ID</label>
<input name="id" />
<br/>
<label for="name">Summary</label>
<input name="name" />
<br/>
"birthday":
<TEXTAREA NAME="birthday" COLS=40 ROWS=6></TEXTAREA>
<br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>

至此,服务端代码完毕。

最后,编写客户端程序,验证相关的功能,代码如下:

package sample.hello.resources.client;

import java.net.URI;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder; import sample.hello.resources.bean.Person; 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.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.representation.Form; public class PersonsTest { public static void main(String[] args) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI()); Person person = new Person("333","小杜","1988-09-25");
ClientResponse response = service.path("rest").path("persons").path(person.getId()).accept(MediaType.APPLICATION_XML).put(ClientResponse.class,person);
System.out.println(response.getStatus()); System.out.println( service.path("rest").path("persons").accept(MediaType.TEXT_XML).get(String.class));
System.out.println( service.path("rest").path("persons").accept(MediaType.APPLICATION_JSON).get(String.class));
System.out.println( service.path("rest").path("persons").accept(MediaType.APPLICATION_XML).get(String.class)); System.out.println(service.path("rest").path("persons/111").accept(MediaType.APPLICATION_XML).get(String.class));
service.path("rest").path("persons/111").delete(); System.out.println(service.path("rest").path("persons").accept(MediaType.APPLICATION_XML).get(String.class)); Form form = new Form();
form.add("id", "444");
form.add("name", "小飞");
form.add("birthday", "1987-01-03");
response = service.path("rest").path("persons").type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class,form);
System.out.println("Form response " + response.getEntity(String.class));
System.out.println(service.path("rest").path("persons").accept(MediaType.APPLICATION_XML).get(String.class)); }
private static URI getBaseURI(){
return UriBuilder.fromUri("http://localhost:8080/Restfull").build();
}
}

运行结果如下图所示:

至此,restful完整的CRUD操作,就算完成。

源码:http://pan.baidu.com/s/1kUAVSbX

restfull环境搭建-helloword(三)的更多相关文章

  1. restfull环境搭建-helloword

    原文地址:http://blog.csdn.net/u013158799/article/details/39758341 1. REST和RESTful Web Services的简要说明 REST ...

  2. restfull环境搭建-helloword(二)

    原文地址:http://only81.iteye.com/blog/1689537 本文描述,获取XML或json格式数据 首先,创建一个bean,比如Todo(JAXB自动将bean文件,转换成xm ...

  3. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...

  4. SpringMVC 学习 十 SSM环境搭建(三)springMVC文件配置

    SpringMVC文件配置的详细过程,可以查看springMVC环境搭建的注解配置篇<springMVC学习三 注解开发环境搭建> <?xml version="1.0&q ...

  5. [原]项目进阶 之 持续构建环境搭建(三)Maven环境搭建

    上次的博文项目进阶 之 持续构建环境搭建(二)Nexus私服器中,我们搭建了一个Nexus的maven私服,这次我们来重点讲解一下Maven的安装和配置.这里说明一下这次的环境搭建,比较基础,但却非常 ...

  6. 【Slickflow学习】.NET开源工作流环境搭建(三)

    第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-环境搭建 在VS2010中使用附加进程的方式调试IIS ...

  7. Spark环境搭建(三)-----------yarn环境搭建及测试作业提交

    配置好HDFS之后,接下来配置单节点的yarn环境 1,修改配置文件 文件 : /root/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/yarn-site-xml 插入 ...

  8. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  9. J2EE环境搭建(三)配置Tomcat 7.0的局部数据源

    在J2EE环境搭建(一)中遗留下一个配置Tomcat数据源的问题,最近都在专心搞iOS的东西,由于J2EE布置了作业,所以又回过头来搞下J2EE.汗... 在这里我使用的是MySQL. 1.配置MyS ...

随机推荐

  1. Win10更换电脑,又不想重装系统的解决方法

    问题描述: 在公司因为两年前用的i3的电脑很卡,然后想换i5的电脑,但是又不想重装系统,因为安装的东西太多了,重装很麻烦 Windows to go介绍: Windows To Go是Windows ...

  2. Java设计模式之二 ----- 工厂模式

    在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...

  3. <20190103>别傻了,一些 新的技术注定只适合新人

    故障现象:    用vmware跑的虚拟机不兼容 某银行网银的U盾. 插入usb口后无法识别U盾, 解决过程: 1  更换2台各自不同电脑, 使用前置USB口, 后置USB口.  故障依旧. 2  使 ...

  4. (转)Python网络爬虫实战:世纪佳缘爬取近6万条数据

    又是一年双十一了,不知道从什么时候开始,双十一从“光棍节”变成了“双十一购物狂欢节”,最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. 翻着安静到死寂的聊天列表,我忽然惊醒,不行 ...

  5. 20145236《网络攻防》 Exp3 免杀原理与实践

    20145236<网络攻防> Exp3 免杀原理与实践 一.基础问题回答 1.杀软是如何检测出恶意代码的? 恶意代码有其特有的特征码,杀软将特征码加入检测库中,当检测到一段代码中具有这样的 ...

  6. linux连接iscsi存储方法

    当前存储openfiler   IP为 192.168.221.99  端口为3260 安装.启动iscsi rpm包  并改为开机自动运行 探测存储服务器 iscsiadm -m discovery ...

  7. day04--流程控制之if

    编程的目的是让计算机像人脑一样工作,因此就需要让计算机具备人脑一样的逻辑思维,这里就需要用到计算机语言的流程控制: 流程控制之if......else 语法1: if 条件: 代码块 # 一组代码块的 ...

  8. Shell脚本开发过程中遇到的问题处理

    1. 执行shell脚本报  Unsupported major.minor version 52.0 报错原因:java文件jdk和服务器上的jdk不匹配, 解决方法: a.查看当前服务器用的jdk ...

  9. Linux中添加、修改和删除用户和用户组

    宽为限 紧用功 功夫到 滞塞通 一.用户: 在创建用户时,需要为新建用户指定一用户组,如果不指定其用户所属的工作组,自动会生成一个与用户名同名的工作组.创建用户user1的时候指定其所属工作组user ...

  10. 初级算法-6.两个数组的交集 II

    题目描述: 给定两个数组,编写一个函数来计算它们的交集. 示例 : 输入: nums1 = [,,,], nums2 = [,] 输出: [,] 示例 : 输入: nums1 = [,,], nums ...