原文地址: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类,代码如下:

  1. package sample.hello.resources.bean;
  2.  
  3. import javax.xml.bind.annotation.XmlRootElement;
  4.  
  5. @XmlRootElement
  6. public class Person {
  7. private String id;
  8. private String name;
  9. private String birthday;
  10.  
  11. public Person() {
  12. }
  13.  
  14. public Person(String id, String name, String birthday) {
  15. this.id = id;
  16. this.name = name;
  17. this.birthday = birthday;
  18. }
  19.  
  20. public String getId() {
  21. return id;
  22. }
  23. public void setId(String id) {
  24. this.id = id;
  25. }
  26. public String getName() {
  27. return name;
  28. }
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. public String getBirthday() {
  33. return birthday;
  34. }
  35. public void setBirthday(String birthday) {
  36. this.birthday = birthday;
  37. }
  38.  
  39. }

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

  1. package sample.hello.resources.bean;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8.  
  9. public class PersonFactory {
  10. /**
  11. * 单例模式
  12. */
  13. private static PersonFactory personFactory = null;
  14. private PersonFactory(){}
  15. public static PersonFactory getInstance(){
  16. if(personFactory==null){
  17. personFactory = new PersonFactory();
  18. }
  19. return personFactory;
  20. }
  21. /**
  22. * 存储person的map
  23. */
  24. private static Map<String, Person>personProvider = new HashMap<String, Person>();
  25.  
  26. static{
  27. Person person = new Person();
  28. person.setId("111");
  29. person.setName("小敏");
  30. person.setBirthday("1988-03-21");
  31. personProvider.put("111", person);
  32.  
  33. Person person2 = new Person();
  34. person2.setId("222");
  35. person2.setName("小丰");
  36. person2.setBirthday("1988-04-22");
  37. personProvider.put("222", person2);
  38. }
  39. /**
  40. * 根据id获取对应的person
  41. * @param id
  42. * @return
  43. */
  44. public Person getPersonById(String id){
  45. return personProvider.get(id);
  46. }
  47. /**
  48. * 添加对应的person到map中
  49. * @param person
  50. */
  51. public void addPerson(Person person){
  52. personProvider.put(person.getId(), person);
  53. }
  54. /**
  55. * 删除对应的person
  56. * @param id
  57. */
  58. public void deletePerson(String id){
  59. personProvider.remove(id);
  60. }
  61. /**
  62. * 获取所有的person
  63. * @return
  64. */
  65. public List<Person>getAllPerson(){
  66. List<Person> persons = new ArrayList<Person>();
  67. Set<String> keys = personProvider.keySet();
  68. for(String key:keys){
  69. persons.add(personProvider.get(key));
  70. }
  71. return persons;
  72. }
  73. }

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

  1. package sample.hello.resources;
  2.  
  3. import javax.ws.rs.Consumes;
  4. import javax.ws.rs.DELETE;
  5. import javax.ws.rs.GET;
  6. import javax.ws.rs.PUT;
  7. import javax.ws.rs.Produces;
  8. import javax.ws.rs.core.Context;
  9. import javax.ws.rs.core.MediaType;
  10. import javax.ws.rs.core.Request;
  11. import javax.ws.rs.core.Response;
  12. import javax.ws.rs.core.UriInfo;
  13. import javax.xml.bind.JAXBElement;
  14.  
  15. import sample.hello.resources.bean.Person;
  16. import sample.hello.resources.bean.PersonFactory;
  17.  
  18. public class PersonResource {
  19.  
  20. @Context
  21. UriInfo uriInfo;
  22. @Context
  23. Request request;
  24. String id;
  25. public PersonResource(UriInfo uriInfo, Request request, String id) {
  26. this.uriInfo = uriInfo;
  27. this.request = request;
  28. this.id = id;
  29. }
  30.  
  31. @GET
  32. @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
  33. public Person getPerson(){
  34. Person person = PersonFactory.getInstance().getPersonById(id);
  35. if(person==null){
  36. throw new RuntimeException("查到不对id="+id+"的person");
  37. }
  38. return person;
  39. }
  40.  
  41. @GET
  42. @Produces({MediaType.TEXT_XML})
  43. public Person getPersonXML(){
  44. Person person = PersonFactory.getInstance().getPersonById(id);
  45. if(person==null){
  46. throw new RuntimeException("查到不对id="+id+"的person");
  47. }
  48. return person;
  49. }
  50.  
  51. @PUT
  52. @Consumes(MediaType.APPLICATION_XML)
  53. public Response addPerson(JAXBElement<Person>person){
  54. Person per = person.getValue();
  55. return putAndGetResponse(per);
  56. }
  57.  
  58. @DELETE
  59. public void deletePerson(){
  60. Person person = PersonFactory.getInstance().getPersonById(id);
  61. if(person==null){
  62. throw new RuntimeException("Delete: person with " + id + " not found");
  63. }else{
  64. PersonFactory.getInstance().deletePerson(id);
  65. }
  66. }
  67.  
  68. private Response putAndGetResponse(Person person){
  69. Response res;
  70. if(PersonFactory.getInstance().getPersonById(person.getId())!=null){
  71. res = Response.noContent().build();
  72. }else{
  73. res = Response.created(uriInfo.getAbsolutePath()).build();
  74. }
  75. PersonFactory.getInstance().addPerson(person);
  76. return res;
  77. }
  78.  
  79. }

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

  1. package sample.hello.resources;
  2.  
  3. import java.io.IOException;
  4. import java.util.List;
  5.  
  6. import javax.ws.rs.Consumes;
  7. import javax.ws.rs.FormParam;
  8. import javax.ws.rs.GET;
  9. import javax.ws.rs.POST;
  10. import javax.ws.rs.Path;
  11. import javax.ws.rs.PathParam;
  12. import javax.ws.rs.Produces;
  13. import javax.ws.rs.core.Context;
  14. import javax.ws.rs.core.MediaType;
  15. import javax.ws.rs.core.Request;
  16. import javax.ws.rs.core.UriInfo;
  17. import javax.servlet.http.HttpServletResponse;
  18.  
  19. import sample.hello.resources.bean.Person;
  20. import sample.hello.resources.bean.PersonFactory;
  21.  
  22. @Path("/persons")
  23. public class PersonsResource {
  24.  
  25. @Context
  26. UriInfo uriInfo;
  27. @Context
  28. Request request;
  29.  
  30. @GET
  31. @Produces(MediaType.TEXT_XML)
  32. public List<Person> getPersonBrowser() {
  33. List<Person> persons = PersonFactory.getInstance().getAllPerson();
  34. return persons;
  35. }
  36.  
  37. @GET
  38. @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
  39. public List<Person> getPersons() {
  40. List<Person> persons = PersonFactory.getInstance().getAllPerson();
  41. return persons;
  42. }
  43.  
  44. @GET
  45. @Path("count")
  46. @Produces(MediaType.TEXT_PLAIN)
  47. public String getCount() {
  48. int count = PersonFactory.getInstance().getAllPerson().size();
  49. return String.valueOf(count);
  50. }
  51.  
  52. @POST
  53. @Produces(MediaType.TEXT_HTML)
  54. @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
  55. public void newPerson(@FormParam("id") String id,
  56. @FormParam("name") String name,
  57. @FormParam("birthday") String birthday,
  58. @Context HttpServletResponse servletResponse) throws IOException {
  59. Person person = new Person(id,name,birthday);
  60.  
  61. PersonFactory.getInstance().addPerson(person);
  62.  
  63. servletResponse.sendRedirect("../create_person.html");
  64. }
  65.  
  66. @Path("{person}")
  67. public PersonResource getPerson(@PathParam("person") String id) {
  68. return new PersonResource(uriInfo, request, id);
  69. }
  70. }

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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Form to create a new resource</title>
  6. </head>
  7. <body>
  8. <form action="../de.vogella.jersey.todo/rest/todos" method="POST">
  9. <label for="id">ID</label>
  10. <input name="id" />
  11. <br/>
  12. <label for="name">Summary</label>
  13. <input name="name" />
  14. <br/>
  15. "birthday":
  16. <TEXTAREA NAME="birthday" COLS=40 ROWS=6></TEXTAREA>
  17. <br/>
  18. <input type="submit" value="Submit" />
  19. </form>
  20. </body>
  21. </html>

至此,服务端代码完毕。

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

  1. package sample.hello.resources.client;
  2.  
  3. import java.net.URI;
  4.  
  5. import javax.ws.rs.core.MediaType;
  6. import javax.ws.rs.core.UriBuilder;
  7.  
  8. import sample.hello.resources.bean.Person;
  9.  
  10. import com.sun.jersey.api.client.Client;
  11. import com.sun.jersey.api.client.ClientResponse;
  12. import com.sun.jersey.api.client.WebResource;
  13. import com.sun.jersey.api.client.config.ClientConfig;
  14. import com.sun.jersey.api.client.config.DefaultClientConfig;
  15. import com.sun.jersey.api.representation.Form;
  16.  
  17. public class PersonsTest {
  18.  
  19. public static void main(String[] args) {
  20. ClientConfig config = new DefaultClientConfig();
  21. Client client = Client.create(config);
  22. WebResource service = client.resource(getBaseURI());
  23.  
  24. Person person = new Person("333","小杜","1988-09-25");
  25. ClientResponse response = service.path("rest").path("persons").path(person.getId()).accept(MediaType.APPLICATION_XML).put(ClientResponse.class,person);
  26. System.out.println(response.getStatus());
  27.  
  28. System.out.println( service.path("rest").path("persons").accept(MediaType.TEXT_XML).get(String.class));
  29. System.out.println( service.path("rest").path("persons").accept(MediaType.APPLICATION_JSON).get(String.class));
  30. System.out.println( service.path("rest").path("persons").accept(MediaType.APPLICATION_XML).get(String.class));
  31.  
  32. System.out.println(service.path("rest").path("persons/111").accept(MediaType.APPLICATION_XML).get(String.class));
  33. service.path("rest").path("persons/111").delete();
  34.  
  35. System.out.println(service.path("rest").path("persons").accept(MediaType.APPLICATION_XML).get(String.class));
  36.  
  37. Form form = new Form();
  38. form.add("id", "444");
  39. form.add("name", "小飞");
  40. form.add("birthday", "1987-01-03");
  41. response = service.path("rest").path("persons").type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class,form);
  42. System.out.println("Form response " + response.getEntity(String.class));
  43. System.out.println(service.path("rest").path("persons").accept(MediaType.APPLICATION_XML).get(String.class));
  44.  
  45. }
  46. private static URI getBaseURI(){
  47. return UriBuilder.fromUri("http://localhost:8080/Restfull").build();
  48. }
  49. }

运行结果如下图所示:

至此,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. godaddy.com 都转到 www.dnspod.cn

    我们在godaddy上注册了域名,但因为godaddy对域名解析的诸多限制和缓慢. 所以必需把域名服务器更改为dnspod上,然后再在dnspod上做A记录,CNAME等设置都很方便.

  2. CSS Hack的一些知识

    测试环境:Windows7 主要测试:IE6.IE7.IE8.Fire Fox3.5.6 次要测试:Chrome4.0.Opera10.10.Safari4.04.360浏览器3.1 为了能够让多个H ...

  3. Tomcat 访问页面或服务器异常,请检查这些方面

    若还没有部署网站,请检查 防火墙是否关闭 数据库服务是否打开 浏览器访问的地址和端口是否正确 tomcat 配置文件中的端口是否发生冲突,换一个试试 若出现的是"拒绝连接",检查阿 ...

  4. 新鲜出炉的jquery fileupload 插件

    内容属原创,转载请注明出处 为什么做这个东东 项目中需要用到一个多附件上传的控件,找了一圈没找到中意的(唯一一个中意点的还不开源,费用比较高),这不,只得自己抡刀上了. 需求是什么 这么个上传的东东, ...

  5. 关于解决Python中requests模块在PyCharm工具中导入问题

    问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...

  6. Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法

    当 用,Provider=OraOLEDB.Oracle方式访问ORACLE11g数据库.出现 未在本地计算机注册“OraOLEDB.Oracle”提供程序提示.解决方案如下: 客户端环境:Win7 ...

  7. json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1

    问题描述:使用Python代码将txt城市列表文件转换为xls文件,源码如下, #!/usr/bin/env Python # coding=utf-8 import os import json i ...

  8. 最近公共祖先(LCA)模板

    第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每行包含两个正整数x.y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树). 接下来M行 ...

  9. Linux下 XordDos(BillGates)木马查杀记录

    最近朋友的一台服务器突然网络异常,cpu占用率暴表,登录上去一查,cpu占用300% 左右,流量异常,经过看查进程,获取信息最终确认为中了dos木马,经过几天的研究,基本上已经清除,以下是清理记录. ...

  10. Qt Creator中如何选择某个子项目为启动项目

    Qt Creator中的子目录项目类似于Visual Studio中的Solution(解决方案),可以用来管理多个子项目.但是在Qt Creator IDE中由不能像Visual Studio中那样 ...