1- Mục tiêu của ví dụ
Trong tài liệu này tôi cung cấp cho bạn một ví dụ RESTful Web Service đơn giản với các chức năng Create + Read + Update + Delete (CRUD).
Các công nghệ tiên tiến được sử dụng :
-
Jersey RESTful API
-
JAXB
JAXB (Java Architecture for XML Binding): Là một Java API mã nguồn mở, nó chính thức được tích hợp vào Java tiêu chuẩn (JSE) từ phiên bản 1.6.
JAXB giúp chuyển đổi các đối tượng Java thành XML và ngược lại. Bạn có thể xem hướng dẫn về JAXB tại đây:Bạn đang đọc: Ví dụ CRUD đơn giản với Java RESTful Web Service
- Java Architecture for XML Binding (JAXB)
RESTful Web Service với Jersey sử dụng JAXB như là một XML-Binding mặc định để chuyển đổi các đối tượng Java thành XML và ngược lại.
Chuyển List thành XML
Trong RESTful Web Service với Jersey, MOXy chính là JSON-Binding mặc định, nó sử dụng để chuyển đổi một đối tượng Java thành JSON và ngược lại.
Các REST service sẽ quy đổi những Java Object thành JSON và ngược lại một cách tự động hóa, bạn không cần phải gắn bất kể một Annotation nào vào những lớp ” Mã Sản Phẩm ” .
2- Tạo Maven Project
Trên Eclipse chọn :
- File/New/Other..
Đảm bảo rằng Project của bạn sử dụng Java >= 1.6, điều này là cần thiết bởi các thư viện JAXB được tích hợp sẵn vào Java từ phiên bản 1.6.
Project Properties/Project Facet:
![]()
3- Khai báo Maven & web.xml
Khai báo JERSEY servlet vào web.xml:
web.xml
RESTful CRUD Example
jerseyServlet
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
org.o7planning.restfulcrud
1
jerseyServlet
/rest/*
pom.xml
4.0.0
org.o7planning
RESTfulCRUD
war
0.0.1-SNAPSHOT
RESTfulCRUD Maven Webapp
http://maven.apache.org
junit
junit
3.8.1
test
javax.servlet
javax.servlet-api
3.1.0
provided
asm
asm
3.3.1
com.sun.jersey
jersey-bundle
1.19.2
org.json
json
20160810
com.sun.jersey
jersey-server
1.19.2
com.sun.jersey
jersey-core
1.19.2
org.codehaus.jackson
jackson-mapper-asl
1.9.13
RESTfulCRUD
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
/RESTfulCRUD
8080
4- Web service classes
EmployeeDAO. java
package org.o7planning.restfulcrud.dao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.o7planning.restfulcrud.model.Employee;
public class EmployeeDAO {
private static final Map empMap = new HashMap();
static {
initEmps();
}
private static void initEmps() {
Employee emp1 = new Employee("E01", "Smith", "Clerk");
Employee emp2 = new Employee("E02", "Allen", "Salesman");
Employee emp3 = new Employee("E03", "Jones", "Manager");
empMap.put(emp1.getEmpNo(), emp1);
empMap.put(emp2.getEmpNo(), emp2);
empMap.put(emp3.getEmpNo(), emp3);
}
public static Employee getEmployee(String empNo) {
return empMap.get(empNo);
}
public static Employee addEmployee(Employee emp) {
empMap.put(emp.getEmpNo(), emp);
return emp;
}
public static Employee updateEmployee(Employee emp) {
empMap.put(emp.getEmpNo(), emp);
return emp;
}
public static void deleteEmployee(String empNo) {
empMap.remove(empNo);
}
public static List getAllEmployees() {
Collection c = empMap.values();
List list = new ArrayList();
list.addAll(c);
return list;
}
List list;
}
Employee. java
package org.o7planning.restfulcrud.model;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "employee")
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee {
private String empNo;
private String empName;
private String position;
// Constructor mặc định này là bắt buộc nếu có thêm cấu tử khác.
public Employee() {
}
public Employee(String empNo, String empName, String position) {
this.empNo = empNo;
this.empName = empName;
this.position = position;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
EmployeeService là một RESTful web service, nó hỗ trợ cả hai định dạng XML và JSON.
EmployeeService.java
package org.o7planning.restfulcrud.service;
import java.util.List;
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 javax.ws.rs.core.MediaType;
import org.o7planning.restfulcrud.dao.EmployeeDAO;
import org.o7planning.restfulcrud.model.Employee;
@Path("/employees")
public class EmployeeService {
// URI:
// /contextPath/servletPath/employees
@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List getEmployees_JSON() {
List listOfCountries = EmployeeDAO.getAllEmployees();
return listOfCountries;
}
// URI:
// /contextPath/servletPath/employees/{empNo}
@GET
@Path("/{empNo}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Employee getEmployee(@PathParam("empNo") String empNo) {
return EmployeeDAO.getEmployee(empNo);
}
// URI:
// /contextPath/servletPath/employees
@POST
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Employee addEmployee(Employee emp) {
return EmployeeDAO.addEmployee(emp);
}
// URI:
// /contextPath/servletPath/employees
@PUT
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Employee updateEmployee(Employee emp) {
return EmployeeDAO.updateEmployee(emp);
}
@DELETE
@Path("/{empNo}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public void deleteEmployee(@PathParam("empNo") String empNo) {
EmployeeDAO.deleteEmployee(empNo);
}
}
Các URI tương quan tới CRUD ( Create, Read, Update, Delete ) gồm có :
Action
URI + Data (XML hoặc JSON)
Create
( @ POST )
/contextPath/servletPath/employees
{
“empNo”:”E05″,
“empName”:”Martin”,
“position”:”Salesman”
}
Read
( @ GET )
/contextPath/servletPath/employees
/contextPath/servletPath/employees/{empNo}
Update
(@PUT)
/contextPath/servletPath/employees
{
“empNo”:”E01″,
“empName”:”Smith 2″,
“position”:”Cleck”
}
Delete
( @ DELETE )
/contextPath/servletPath/employees/{empNo}
5- Cấu hình chạy ứng dụng
6- Test ứng dụng
Chạy URL sau trên trình duyệt:
Bạn cần sử dụng Advanced RESTClient để có thể test các RESTful web service.
Xem thêm RESTClient & Advanced REST Client:
- RESTClient công cụ gỡ rối cho RESTful Web Service
Ví dụ, thêm Employee sử dụng Advanced RESTClient.
Source: https://www.lesabeilles.biz
Category: Mạng Internet
Leave a Reply