Restlet - 基於JAX-RS的Restlet開發例項
一、示例說明
版本:Restlet版本為2.1.0。
另外:這個應該是才開始接觸級別的示例,剛學者可以作為借鑑看看,大神請深藏您的功與名。
二、關於Restlet
1、官網:http://restlet.org/
2、原則:為所有“事物”即資源定義ID;將所有事物連結在一起;使用標準方法,即CRUD;資源多重表述;無狀態通訊。具體描述谷歌搜尋。
(1)、testGetXml():
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Student><age>18</age><id>1</id><name>Michael</name><sex>1</sex></Student>
(2)、testGetJson:
{"id":1,"sex":1,"age":18,"name":"Michael"}
(3)、testPut():1
再呼叫testGetJson()傳入{id}=1時:{"id":1,"sex":0,"age":22,"name":"testPut"}
(4)、testPost():5
再呼叫testGetJson()傳入{id}=5時:{"id":5,"sex":39,"age":0,"name":"testPost"}
版本:Restlet版本為2.1.0。
另外:這個應該是才開始接觸級別的示例,剛學者可以作為借鑑看看,大神請深藏您的功與名。
二、關於Restlet
1、官網:http://restlet.org/
2、原則:為所有“事物”即資源定義ID;將所有事物連結在一起;使用標準方法,即CRUD;資源多重表述;無狀態通訊。具體描述谷歌搜尋。
三、建立Java Web工程,新增相關Jar。文中示例工程名為JAXRSRestlet
四、建立Model,示例為Student
public class Student {
private Integer id;
private String name;
private Integer sex;
private Integer age;
public Student() {
}
/** setter/getter **/
}
五、建立BusinessObject類,示例虛擬了一個資料庫和相應的一些操作
public class StudentBO {
private static Map<Integer, Student> students = new HashMap<Integer, Student>();
// next Id
private static int nextId = 5;
static {
students.put(1, new Student(1, "Michael", 1, 18));
students.put(2, new Student(2, "Anthony", 1, 22));
students.put(3, new Student(3, "Isabella", 0, 19));
students.put(4, new Student(4, "Aiden", 1, 20));
}
public Student getStudent(Integer id) {
return students.get(id);
}
public List<Student> getStudentAll() {
return new ArrayList<Student>(students.values());
}
public Integer saveOrUpdateStudent(Student student) {
if (student.getId() == null) {
student.setId(nextId++);
}
students.put(student.getId(), student);
return student.getId();
}
public Integer removeStudent(Integer id) {
students.remove(id);
return id;
}
}
六、建立對應的Resource類,具體看註釋
//student路徑進來的都會呼叫StudentResource來處理
@Path("student")
public class StudentResource {
StudentBO studentBO = new StudentBO();
// 說明了http的方法是get方法
@GET
// 每個方法前都有對應path,用來申明對應uri路徑
@Path("{id}/xml")
// 指定返回的資料格式為xml
@Produces("application/xml")
// 接受傳遞進來的id值,其中id為Path中的{id},注意定義的佔位符與@PathParam要一致
public Student getStudentXml(@PathParam("id") int id) {
return studentBO.getStudent(id);
}
@GET
@Path("{id}/json")
@Produces("application/json")
public Student getStudentJson(@PathParam("id") int id) {
return studentBO.getStudent(id);
}
@POST
@Path("post")
public String addStudent(Representation entity) {
Form form = new Form(entity);
String name = form.getFirstValue("name");
int sex = Integer.parseInt(form.getFirstValue("sex"));
int age = Integer.parseInt(form.getFirstValue("age"));
Student student = new Student();
student.setName(name);
student.setSex(sex);
student.setAge(age);
int i = studentBO.saveOrUpdateStudent(student);
return i + "";
}
@PUT
@Path("put")
public String updateStudent(Representation entity) {
Form form = new Form(entity);
int id = Integer.parseInt(form.getFirstValue("id"));
String name = form.getFirstValue("name");
int sex = Integer.parseInt(form.getFirstValue("sex"));
int age = Integer.parseInt(form.getFirstValue("age"));
Student student = new Student();
student.setId(id);
student.setName(name);
student.setSex(sex);
student.setAge(age);
int i = studentBO.saveOrUpdateStudent(student);
return i + "";
}
}
七、擴充套件javax.ws.rs.core.Application類
public class StudentApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> rrcs = new HashSet<Class<?>>();
// 繫結StudentResource。有多個資源可以在這裡繫結。
rrcs.add(StudentResource.class);
return rrcs;
}
}
八、擴充套件org.restlet.ext.jaxrs.JaxRsApplication類
public class RestJaxRsApplication extends JaxRsApplication {
public RestJaxRsApplication(Context context) {
super(context);
// 將StudentApplication加入了執行環境中,如果有多個Application可以在此繫結
this.add(new StudentApplication());
}
}
九、web.xml配置
<context-param>
<param-name>org.restlet.application</param-name>
<param-value>app.RestJaxRsApplication</param-value>
</context-param>
<servlet>
<servlet-name>RestletServlet</servlet-name>
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
十、Client端測試
/**
* 示例使用了Junit,不用可以寫Main方法
*/
public class Client {
public static String url = "http://127.0.0.1:8080/JAXRSRestlet/";
@Test
public void testGetXml() {
ClientResource client = new ClientResource(url + "student/1/xml");
try {
System.out.println(client.get().getText());
} catch (ResourceException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testGetJson() {
ClientResource client = new ClientResource(url + "student/1/json");
try {
System.out.println(client.get().getText());
} catch (ResourceException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testPost() {
ClientResource client = new ClientResource(url + "student/post");
try {
Form form = new Form();
form.add("name", "testPost");
form.add("age", "0");
form.add("sex", "39");
String id = client.post(form.getWebRepresentation()).getText();
System.out.println(id);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testPut() {
ClientResource client = new ClientResource(url + "student/put");
try {
Form form = new Form();
form.add("id", "1");
form.add("name", "testPut");
form.add("age", "22");
form.add("sex", "0");
String id = client.put(form.getWebRepresentation()).getText();
System.out.println(id);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testDelete() {
ClientResource client = new ClientResource(url + "student/1");
try {
System.out.println(client.delete().getText());
} catch (ResourceException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
十一、輸出結果(1)、testGetXml():
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Student><age>18</age><id>1</id><name>Michael</name><sex>1</sex></Student>
(2)、testGetJson:
{"id":1,"sex":1,"age":18,"name":"Michael"}
(3)、testPut():1
再呼叫testGetJson()傳入{id}=1時:{"id":1,"sex":0,"age":22,"name":"testPut"}
(4)、testPost():5
再呼叫testGetJson()傳入{id}=5時:{"id":5,"sex":39,"age":0,"name":"testPost"}
相關文章
- 基於svelteKit開發仿微信app介面聊天例項APP
- android原生開發recyclerview基礎例項AndroidView
- 基於laravel的事件監聽例項Laravel事件
- MyBatis基於Maven入門例項MyBatisMaven
- 基於NCF的多模組協同例項
- Python例項大全(基於Python3.7.4)Python
- python開發例項-python開發案例Python
- python專案開發例項書-關於開發Python專案的心得總結Python
- 基於SEH的靜態反除錯(例項分析)除錯
- C#開發例項大全C#
- java JAX-RS快速開發RESTful服務JavaREST
- 基於區塊鏈的數字版權交易系統開發流程方案(內附原始碼例項)區塊鏈原始碼
- 基於QT錄製PCM音訊例項詳細QT音訊
- Hibernate基於Maven入門例項,與MyBatis比對MavenMyBatis
- restful風格請求,基於token鑑權例項REST
- 一個pyspark 開發練習例項Spark
- 原生javascript開發計算器例項JavaScript
- 基於4G Cat.1的內網穿透例項分享內網穿透
- 基於大量圖片與例項深度解析Netty中的核心元件Netty元件
- 遷移學習系列---基於例項方法的遷移學習遷移學習
- Python基礎——切片例項Python
- 基於滴滴雲 DC2 搭建 VPP 應用例項
- 原生js使用物件導向的方法開發選項卡例項教程JS物件
- 基於Doris實時資料開發的一些注意事項
- 基於Gin框架的web後端開發(十): Gin框架-中介軟體(定義、使用、通訊與例項)詳解框架Web後端
- 測試驅動開發(TDD)例項演示
- vlc qt player 播放器開發例項QT播放器
- Docker開發例項之應用場景Docker
- 基於Kubernetes的hpa實現pod例項數量的自動伸縮
- 深度學習例項之基於mnist的手寫數字識別深度學習
- PCIE_DMA例項五:基於XILINX XDMA的PCIE高速採集卡
- 開始例項化
- 基於 Hyperf 開發的商城
- 基於Github的敏捷開發Github敏捷
- 基於TODO的開發方法
- ArcGIS開發(二)——一個基本視窗的例項化
- PHP+jQuery開發簡單的翻牌抽獎例項PHPjQuery
- Java開發中的事件驅動模型例項詳解Java事件模型
- php例項化物件的例項方法PHP物件