如何封装RESTful Web Service
来源:互联网 发布:数据库设计问题 编辑:程序博客网 时间:2024/06/09 22:13
REST(REpresentational State Transfer)是Roy Fielding博士于2000年在他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。近年来,越来越多的Web Service开始采用REST风格设计和实现。例如,亚马逊提供接近REST风格的Web Service进行图书查找;雅虎提供的Web Service也是REST风格的。
如果要对REST有更深入的了解和更深刻的认识,推荐大家阅读InfoQ上面的一篇文章《理解本真的REST架构风格》。相信很多自以为懂REST的人看完这篇文章之后才知道什么是真正的REST。在IBM的开发者社区中有一篇非常好的文章,名为《使用Spring 3来创建RESTful Web Services》,讲解如何用spring Web和Spring MVC来创建REST风格的Web Service。由于这篇文章已经讲得很好了,这里我就不再赘述其中的内容。
这里要讲的是基于Apache CXF来创建RESTful Web Service。可以在Apache的网站下载到CXF的发行版本。Apache的官网是这样介绍CXF的:
Apache CXF is an open source services framework. CXF helps you build and develop services using frontend programming APIs, like JAX-WS and JAX-RS. These services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports such as HTTP, JMS or JBI.
下载完成后解压并找到lib目录,将其中的jar文件添加你的Java项目中,接下来就可以开始编写你的Web Service程序了。话不多说,直接上代码。
package com.lovo.domain;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "Student")public class Student { private Integer id; private String name; private String birthday; public Student() { } public Student(Integer id, String name, String birthday) { this.id = id; this.name = name; this.birthday = birthday; } public Integer getId() { return id; } public void setId(Integer 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; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
package com.lovo.infrastructure;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.lovo.domain.Student;public class StudentRepository { private Map<Integer, Student> map = new HashMap<>(); public StudentRepository() { map.put(1001, new Student(1001, "骆昊", "1980-11-28")); map.put(1002, new Student(1002, "王大锤", "1992-2-2")); map.put(1003, new Student(1003, "张三丰", "1930-3-3")); } public void save(Student student) { if (student != null) { map.put(student.getId(), student); } } public void delete(Student student) { if (student != null && map.containsKey(student.getId())) { map.remove(student.getId()); } } public void update(Student student) { delete(student); save(student); } public Student findById(Integer id) { return map.get(id); } public List<Student> findAll() { return new ArrayList<Student>(map.values()); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
package com.lovo.service;import java.util.List;import javax.ws.rs.Consumes;import javax.ws.rs.DELETE;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 com.lovo.domain.Student;import com.lovo.infrastructure.StudentRepository;@Path("/service")@Produces("application/json")public class StudentService { private StudentRepository studentRepo = new StudentRepository(); @GET @Path("/stu/{id}") @Consumes("application/json") public Student getStudent(@PathParam("id") Integer id) { return studentRepo.findById(id); } @GET @Path("/stu") @Consumes("application/json") public List<Student> getAllStudents() { return studentRepo.findAll(); } @POST @Path("/stu") @Consumes("application/json") public boolean addStudent(Student student) { if (getStudent(student.getId()) == null) { studentRepo.save(student); return true; } return false; } @PUT @Path("/stu/{id}") @Consumes("application/json") public boolean updateStudent(@PathParam("id") Integer id, Student student) { if (getStudent(id) != null) { studentRepo.update(student); return true; } return false; } @DELETE @Path("/stu/{id}") @Consumes("application/json") public boolean deleteStudent(@PathParam("id") Integer id) { Student student = getStudent(id); if (student != null) { studentRepo.delete(student); return true; } return false; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
最后来启动Web Service的服务器并进行测试。
package com.lovo;import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;import com.lovo.domain.Student;import com.lovo.service.StudentService;public class MyRestServer { public static void main(String[] args) { JAXRSServerFactoryBean myRESTfulServer = new JAXRSServerFactoryBean(); myRESTfulServer.setResourceClasses(Student.class); myRESTfulServer.setServiceBean(new StudentService()); myRESTfulServer.setAddress("http://localhost:9999/"); myRESTfulServer.create(); } }
- 如何封装RESTful Web Service
- 如何封装RESTful Web Service
- 如何封装RESTful Web Service
- 如何封装RESTful Web Service
- 如何封装RESTful Web Service
- 如何封装RESTful Web Service
- 如何封装RESTful Web Service
- 如何封装RESTful Web Service
- Restful Web Service (1)
- Restful web service (2)
- 什么是RESTful Web Service?
- Restful Web Service
- Web Service RESTful
- springMVC restful web service
- RESTful web service study
- restful web service
- Restful Web Service
- 开发RESTful web Service
- oracle代码静态性能扫描
- 深入理解Java常用类----String(二)
- LeedCode 之 Merge Sorted Array
- Hadoop集群搭建(hadoop+zookeeper+hbase)Ubuntu14.04
- solr自定义分词器
- 如何封装RESTful Web Service
- 日志系统ELK使用详解(四)--kibana安装和使用
- Spring之使用JDOM读取XML文件
- java 常见错误&解决办法
- 计算一个字符串里数字、汉字、字母的个数
- UNIX环境高级编程习题——第三章
- linux常用命令
- ElsaticSearch增查改笔记
- 几种方法用来提取图像轮廓的例子