restfull环境搭建-helloword(三)
原文地址: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(三)的更多相关文章
- restfull环境搭建-helloword
原文地址:http://blog.csdn.net/u013158799/article/details/39758341 1. REST和RESTful Web Services的简要说明 REST ...
- restfull环境搭建-helloword(二)
原文地址:http://only81.iteye.com/blog/1689537 本文描述,获取XML或json格式数据 首先,创建一个bean,比如Todo(JAXB自动将bean文件,转换成xm ...
- 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群
上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...
- SpringMVC 学习 十 SSM环境搭建(三)springMVC文件配置
SpringMVC文件配置的详细过程,可以查看springMVC环境搭建的注解配置篇<springMVC学习三 注解开发环境搭建> <?xml version="1.0&q ...
- [原]项目进阶 之 持续构建环境搭建(三)Maven环境搭建
上次的博文项目进阶 之 持续构建环境搭建(二)Nexus私服器中,我们搭建了一个Nexus的maven私服,这次我们来重点讲解一下Maven的安装和配置.这里说明一下这次的环境搭建,比较基础,但却非常 ...
- 【Slickflow学习】.NET开源工作流环境搭建(三)
第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-环境搭建 在VS2010中使用附加进程的方式调试IIS ...
- Spark环境搭建(三)-----------yarn环境搭建及测试作业提交
配置好HDFS之后,接下来配置单节点的yarn环境 1,修改配置文件 文件 : /root/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/yarn-site-xml 插入 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- J2EE环境搭建(三)配置Tomcat 7.0的局部数据源
在J2EE环境搭建(一)中遗留下一个配置Tomcat数据源的问题,最近都在专心搞iOS的东西,由于J2EE布置了作业,所以又回过头来搞下J2EE.汗... 在这里我使用的是MySQL. 1.配置MyS ...
随机推荐
- godaddy.com 都转到 www.dnspod.cn
我们在godaddy上注册了域名,但因为godaddy对域名解析的诸多限制和缓慢. 所以必需把域名服务器更改为dnspod上,然后再在dnspod上做A记录,CNAME等设置都很方便.
- CSS Hack的一些知识
测试环境:Windows7 主要测试:IE6.IE7.IE8.Fire Fox3.5.6 次要测试:Chrome4.0.Opera10.10.Safari4.04.360浏览器3.1 为了能够让多个H ...
- Tomcat 访问页面或服务器异常,请检查这些方面
若还没有部署网站,请检查 防火墙是否关闭 数据库服务是否打开 浏览器访问的地址和端口是否正确 tomcat 配置文件中的端口是否发生冲突,换一个试试 若出现的是"拒绝连接",检查阿 ...
- 新鲜出炉的jquery fileupload 插件
内容属原创,转载请注明出处 为什么做这个东东 项目中需要用到一个多附件上传的控件,找了一圈没找到中意的(唯一一个中意点的还不开源,费用比较高),这不,只得自己抡刀上了. 需求是什么 这么个上传的东东, ...
- 关于解决Python中requests模块在PyCharm工具中导入问题
问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...
- Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法
当 用,Provider=OraOLEDB.Oracle方式访问ORACLE11g数据库.出现 未在本地计算机注册“OraOLEDB.Oracle”提供程序提示.解决方案如下: 客户端环境:Win7 ...
- 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 ...
- 最近公共祖先(LCA)模板
第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每行包含两个正整数x.y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树). 接下来M行 ...
- Linux下 XordDos(BillGates)木马查杀记录
最近朋友的一台服务器突然网络异常,cpu占用率暴表,登录上去一查,cpu占用300% 左右,流量异常,经过看查进程,获取信息最终确认为中了dos木马,经过几天的研究,基本上已经清除,以下是清理记录. ...
- Qt Creator中如何选择某个子项目为启动项目
Qt Creator中的子目录项目类似于Visual Studio中的Solution(解决方案),可以用来管理多个子项目.但是在Qt Creator IDE中由不能像Visual Studio中那样 ...