用MyEclipse開發(fā)REST Web Service

文章翻譯自Genuitec學(xué)習(xí)中心
在本例中,將創(chuàng)建一個(gè)管理顧客的簡單Web Service

1. 創(chuàng)建一個(gè)REST Web Service項(xiàng)目

從項(xiàng)目的配置開始REST Web Service:
1. 打開MyEclipse后,依次點(diǎn)擊File->New->Web Service Project;或者點(diǎn)擊工具條上的新建圖標(biāo)
2. 在Project name框中輸入restdemo觉痛,WebServices Framework選擇REST(JAX-RS)框架,然后點(diǎn)擊next進(jìn)入下一步立宜;

創(chuàng)建Web Service新項(xiàng)目
  1. 接受默認(rèn)的文件夾路徑千绪,一路點(diǎn)擊下一步娃兽;
image.png
  1. 在配置web module部分可以根據(jù)需要將Generate web.xml deployment descriptor勾選上朽肥,建議勾上禁筏,點(diǎn)擊finish完成項(xiàng)目創(chuàng)建
完成項(xiàng)目

2. 創(chuàng)建一個(gè)新的REST Web Service

在創(chuàng)建好的項(xiàng)目中,開始創(chuàng)建Web服務(wù)衡招,我們將為管理顧客創(chuàng)建實(shí)體類和操作資源的方法類篱昔。

2.1 創(chuàng)建顧客的實(shí)體類

這個(gè)簡單的顧客類包含id,name和address三個(gè)字段蚁吝,用來代表Web Service服務(wù)的顧客對象旱爆。
1. 在之前創(chuàng)建好的restdemo項(xiàng)目上右鍵點(diǎn)擊舀射,選擇New->Class
2. 在Package中輸入com.myeclipseide.ws窘茁,在Name中輸入Customer,如果public static void main復(fù)選框被選中脆烟,取消它山林,然后點(diǎn)擊finish

創(chuàng)建Java類

3. 用下面的代碼替換默認(rèn)生成的內(nèi)容,然后保存

package com.myeclipseide.ws;
 
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
 
public class Customer {
  private int id;
  private String name;
  private String address;
 
  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;
  }
 
  public String getAddress() {
     return address;
  }
 
  public void setAddress(String address) {
    this.address = address;
  }
 
}

本例中使用XML作為序列化格式,即使用XML從Web服務(wù)發(fā)送和接收客戶實(shí)體驼抹。
Customer類中的@XMLRootElement注釋是一個(gè)JAXB注釋桑孩,允許JAXB將該實(shí)體從Java轉(zhuǎn)換為XML并返回。也可以注釋類中的字段和方法來自定義序列化框冀,但是在本例中流椒,默認(rèn)的JAXB就夠了。

2.2創(chuàng)建資源類明也,Web Service的關(guān)鍵

  1. 右鍵點(diǎn)擊restdemo項(xiàng)目宣虾,選擇New->Other;
  2. 在篩選框中輸入web service,選中Web Service,然后點(diǎn)擊next温数;
新建web service

3. 在彈出的向?qū)υ捒蛑行逑酰琒trategy選擇Create web service from Java class,同時(shí)選中Create new Java bean復(fù)選框

image.png

4. 在URL path框中輸入customers,Lifecycle選項(xiàng)選擇Singleton撑刺,從Produces的下拉選項(xiàng)中選擇application/xml鹉胖,點(diǎn)擊Java package右側(cè)的Browse選擇com.myeclipseide.ws(或者輸入),Java Class輸入CustomersResource

Web service詳細(xì)配置

URL路徑 - 指示可以到達(dá)該資源的路徑够傍。在本例中甫菠,我們使用customers,因?yàn)樵撡Y源管理我們的客戶列表冕屯,顧客資源將被托管在“/ customers”淑蔚。
Singleton Lifecycle - 確保在單個(gè)Web應(yīng)用程序中此類只會(huì)被Jersey創(chuàng)建一個(gè)實(shí)例。
Consumes and Produces - 用于指定此資源可以接受和生成的默認(rèn)MIME類型的數(shù)據(jù)愕撰。這些值也可以被類中的各個(gè)方法覆蓋刹衫。如上所述,我們將數(shù)據(jù)序列化為XML搞挣,所以使用application / xml的MIME類型带迟。

  1. 點(diǎn)擊Add按鈕,為Java類添加獲取所有顧客的方法囱桨;在Method name中輸入方法名getCustomers仓犬,返回類型輸入java.util.List<Customer>,然后點(diǎn)擊finish
添加方法

6. 再次點(diǎn)擊Add按鈕舍肠,為Java類添加一個(gè)獲取特定顧客信息的方法搀继;方法名輸入getCustomer,返回類型輸入Customer翠语,URL path輸入{id}叽躯;

添加第二個(gè)方法
  1. 然后點(diǎn)擊該對話框的Add按鈕,為方法添加參數(shù)肌括,參數(shù)值直接在表格中輸入和選擇点骑,如下圖所示,然后點(diǎn)擊finish
為方法添加參數(shù)
  1. 再添加一個(gè)增加顧客的方法,操作如上黑滴,具體參數(shù)如下圖所示憨募;
創(chuàng)建addCustomer方法

9. 在加入三個(gè)方法之后,配置頁面應(yīng)該如下圖所示

最終web service配置

10. 點(diǎn)擊finish生成CustomerResource類袁辈,打開文件可以查看生成的方法菜谣。

3. 具體實(shí)現(xiàn)生成的方法

現(xiàn)在,我們需要為這些方法實(shí)現(xiàn)具體的業(yè)務(wù)邏輯晚缩,本例中沒有使用數(shù)據(jù)庫來管理顧客列表葛菇,為了方便只是使用簡單的map來存儲(chǔ)。用下面的代碼替換CustomersResource類文件中的內(nèi)容

package com.myeclipseide.ws;

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

import javax.ws.rs.Consumes;
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.MediaType;

import com.sun.jersey.spi.resource.Singleton;

@Produces("application/xml")
@Path("customers")
@Singleton
public class CustomersResource {
    private TreeMap<Integer, Customer> customerMap = new TreeMap<Integer, Customer>();
    public CustomersResource(){
        Customer customer = new Customer();
        customer.setName("Harold Abernathy");
        customer.setAddress("Sheffield, UK");
        addCustomer(customer);
    }
    @GET
    public List<Customer> getCustomers() {
        List<Customer> customers = new ArrayList<Customer>();
        customers.addAll(customerMap.values());
        return customers;
    }

    @GET
    @Path("{id}")
    public Customer getCustomer(@PathParam("id") int cId) {
        return customerMap.get(cId);
    }

    @POST
    @Path("add")
    @Produces(MediaType.TEXT_PLAIN)
    @Consumes(MediaType.APPLICATION_XML)
    public String addCustomer(Customer customer) {
        int id = customerMap.size();
        customer.setId(id);
        customerMap.put(id, customer);
        return "Customer" + customer.getName() + "added with Id" + id;
    }
}

4. 發(fā)布 Web Service應(yīng)用

發(fā)布web service最快的方法是使用Run As或者Debug As MyEclipse Server Application.
1. 右鍵點(diǎn)擊項(xiàng)目橡羞,選擇Debug As(或者Run As)->MyEclipse Server Application.
2. 選擇Myeclipse Tomcat(或自己加的Tomcat)眯停,然后點(diǎn)擊finish,完成發(fā)布

選擇發(fā)布服務(wù)器

5. 瀏覽器中測試REST Web Service

到這步咱們的web service基本完成了卿泽,現(xiàn)在在瀏覽器中測試下莺债。
1. 打開瀏覽器,在地址欄中輸入http://localhost:<port>/<project name>/jaxrs/<your url path>/0
返回如下圖的信息签夭,表明成功齐邦。

查詢一個(gè)顧客信息

2. 再測試下Add操作是否正常,使用chrome瀏覽器的Postman插件第租。

  • 輸入http://localhost:8080/restdemo/jaxrs/customers/add
  • 選擇POST方法
  • 在Headers中Key選擇Content-Type,Value選擇application/xml
  • 在Body中輸入需要增加的顧客信息xml形式
  • 點(diǎn)擊Send按鈕措拇,完成添加

測試Add方法

3.在瀏覽器中輸入http://localhost:8080/restdemo/jaxrs/customers/,得到下圖結(jié)果,看到添加成功

查詢所有顧客
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慎宾,一起剝皮案震驚了整個(gè)濱河市丐吓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趟据,老刑警劉巖券犁,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汹碱,居然都是意外死亡粘衬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門咳促,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稚新,“玉大人,你說我怎么就攤上這事跪腹」由荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵尺迂,是天一觀的道長笤妙。 經(jīng)常有香客問我冒掌,道長噪裕,這世上最難降的妖魔是什么蹲盘? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮膳音,結(jié)果婚禮上召衔,老公的妹妹穿的比我還像新娘。我一直安慰自己祭陷,他們只是感情好苍凛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兵志,像睡著了一般醇蝴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上想罕,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天悠栓,我揣著相機(jī)與錄音,去河邊找鬼按价。 笑死惭适,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的楼镐。 我是一名探鬼主播癞志,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼框产!你這毒婦竟也來了凄杯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秉宿,失蹤者是張志新(化名)和其女友劉穎盾舌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蘸鲸,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妖谴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酌摇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膝舅。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窑多,靈堂內(nèi)的尸體忽然破棺而出仍稀,到底是詐尸還是另有隱情,我是刑警寧澤埂息,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布技潘,位于F島的核電站遥巴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏享幽。R本人自食惡果不足惜铲掐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望值桩。 院中可真熱鬧摆霉,春花似錦、人聲如沸奔坟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咳秉。三九已至婉支,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澜建,已是汗流浹背向挖。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霎奢,地道東北人户誓。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像幕侠,于是被迫代替她去往敵國和親帝美。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理晤硕,服務(wù)發(fā)現(xiàn)悼潭,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評論 6 342
  • title: JavaScript兼容性date: 2016-11-22 20:56:06tags: JavaSc...
    劉刀文閱讀 621評論 0 4
  • 直到今天舞箍,一丹采訪放羊娃的那篇報(bào)道給我的印象還是那么的那么的深刻舰褪。雖然是在假TS里面聽到的,但對我的影響非常深遠(yuǎn)疏橄。...
    模糊的雪鐵龍閱讀 192評論 0 0