CXF發佈REST服務

1.什麼是REST服務

  定義:REST就是一種編程風格,它能夠精肯定位網上資源(服務接口、方法、參數)java

  REST支持數據格式:XML、JSON數據庫

  REST支持發送方式:GET,POSTapache

2.REST服務和SOAP服務的比較

由於SOAP並不假定傳輸數據的下層協議,所以必須設計爲能在各類協議上運行。即便絕大多數SOAP是運行在HTTP上,使用URI標識服務,SOAP也僅僅使用POST方法發送請求,用一個惟一的URI標識服務的入口。舉一個圖書館在線查詢管理系統爲例,服務提供者必須爲每一本書提供一個內部標識,而後可能定義一個listBooks操做來返回一系列圖書,一個getBook操做來返回指定的圖書,一個createBook操做來向數據庫加入新增的圖書,一個deleteBook操做來刪除做廢的圖書,每一個操做都有各自的參數,尤爲是用內部標識來標識操做的圖書。這種設計被詬病之處,在於deleteBook操做也要用POST方法來發送,而其實HTTP協議有更和邏輯的DELETE方法可用。REST正是這樣設計的,REST爲每個資源(此處是圖書)指定一個惟一的URI,而用HTTP的4種方法GET、POST、PUT、DELETE直觀地表示獲取、建立、更新和刪除圖書。同時圖書集合也是和單本的圖書不一樣的資源,若是用/books來表明圖書列表,/books/ID來表明標識爲ID的圖書,那麼對/books的GET操做就表明返回整個圖書列表,對/books/ID的DELETE操做表明刪除指定的圖書,等等。編程

3.一個簡單的實例

  3.1 需求

   發佈一個服務能夠用於查詢一個學生和多個學生ide

  3.2 實現

   3.2.1 服務端開發

   步驟 測試

  1.導入jar包this

  2.建立學生的pojo類,這裏設置兩個字段spa

package com.liaobei.pojo;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Student {
  private int id;
  private String name;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
  
}
View Code

 

 注意:在pojo類中加入@XmlRootElement 註釋,不然會報錯設計

          該註釋的做用是把java對象轉換爲xml格式code

 3.建立SEI接口

import java.util.List;

import javax.jws.WebService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.liaobei.pojo.Student;
@WebService
@Path("/student")
public interface StudentInterface {
    
    @GET//指定請求方式,若是服務端發佈的時候指定的是GET(POST),那麼客戶端訪問時必須使用GET(POST)
    @Produces(MediaType.APPLICATION_XML)//指定服務數據類型
    @Path("/query/{name}")//@Path("/query/{id}")就是將「/query」映射到方法上,「{id}」映射到參數上,多個參數,以「/」隔開,放到「{}」中
    public Student queryStudent(@PathParam("name")String name);
    
    
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("/queryList/{name}")
    public List<Student> querySomeStudent(@PathParam("name")String name);
}
View Code

 4.建立SEI的實現類

import java.util.ArrayList;
import java.util.List;

import com.liaobei.pojo.Student;

public class StudentInterfaceImpl implements StudentInterface {

     
    public Student queryStudent(String name) {
        Student s= new Student();
        s.setId(1);
        s.setName("1");
        return s;
    }

     
    public List<Student> querySomeStudent(String name) {
        Student s= new Student();
        s.setId(1);
        s.setName("1");
        
        Student s1= new Student();
        s1.setId(2);
        s1.setName("2");
        
        List<Student> li = new ArrayList<Student>();
        li.add(s);
        li.add(s1);
        return li;
    }

}
View Code

5.發佈服務

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

public class StudentServer {
 public static void main(String[] args) {
     
     JAXRSServerFactoryBean bean  = new JAXRSServerFactoryBean();
     
     bean.setServiceBean(new StudentInterfaceImpl());
     bean.setAddress("http://127.0.0.1:12345/user");
     bean.setResourceClasses(StudentInterfaceImpl.class);
     bean.create();
}
}
View Code

6.測試服務

輸入http://127.0.0.1:12345/user/student/query/1 後若結果以下所示則發佈成功

相關文章
相關標籤/搜索