RESTEasy教程第1部分:基礎

RESTEasy是JBoss / RedHat的JAX-RS實現,內置于JBoss 6之后。
在這里,我將向您展示如何使用RESTEasy和JBossAS7.1.1.FINAL開發一個簡單的RESTful Web服務應用程序。
步驟1:使用Maven配置RESTEasy依賴項。
<project xmlns='http:maven.apache.orgPOM4.0.0' xmlns:xsi='http:www.w3.org2001XMLSchema-instance'xsi:schemaLocation='http:maven.apache.orgPOM4.0.0 http:maven.apache.orgmaven-v4_0_0.xsd'><modelVersion>4.0.0<modelVersion> <groupId>com.sivalabs<groupId><artifactId>resteasy-demo<artifactId><version>0.1<version>  <packaging>war<packaging><name>resteasy-demo Maven Webapp<name><build><finalName>resteasy-demo<finalName><build><dependencies><dependency><groupId>junit<groupId><artifactId>junit<artifactId><version>4.8.2<version><scope>test<scope><dependency><dependency><groupId>org.jboss.resteasy<groupId><artifactId>resteasy-jaxrs<artifactId><version>2.3.2.FINAL<version><scope>provided<scope><dependency><dependency><groupId>org.jboss.resteasy<groupId><artifactId>resteasy-jaxb-provider<artifactId><version>2.3.2.FINAL<version><scope>provided<scope><dependency><dependency><groupId>org.jboss.resteasy<groupId><artifactId>jaxrs-api<artifactId><version>2.3.0.GA<version><scope>provided<scope><dependency><dependency><groupId>org.apache.httpcomponents<groupId><artifactId>httpclient<artifactId><version>4.1.2<version><scope>provided<scope><dependency><dependencies><project>

步驟#2:在web.xml中配置RESTEasy

<web-app xmlns:xsi='http:www.w3.org2001XMLSchema-instance' xmlns='http:java.sun.comxmlnsjavaee' xmlns:web='http:java.sun.comxmlnsjavaeeweb-app_2_5.xsd' xsi:schemaLocation='http:java.sun.comxmlnsjavaee http:java.sun.comxmlnsjavaeeweb-app_3_0.xsd' id='WebApp_ID' version='3.0'><listener><listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap<listener-class><listener><servlet><servlet-name>Resteasy<servlet-name><servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher<servlet-class><servlet><servlet-mapping><servlet-name>Resteasy<servlet-name><url-pattern>rest*<url-pattern><servlet-mapping><context-param><param-name>resteasy.servlet.mapping.prefix<param-name><param-value>rest<param-value><context-param><context-param><param-name>resteasy.scan<param-name><param-value>true<param-value><context-param><web-app>

步驟#3:創建User域類,MockUserTable類以將User對象存儲在內存中以進行測試,并創建UserResource類以將對CRUD的操作公開為RESTful Web服務。

package com.sivalabs.resteasydemo;import java.util.Date;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)public class User {private Integer id;private String name;private String email;private Date dob;setters and getters}package com.sivalabs.resteasydemo;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import com.sivalabs.resteasydemo.User;public class MockUserTable {private static Map<Integer, User> USER_MAP = new HashMap<Integer, User>();static{USER_MAP.put(1, new User(1,'admin','admin@gmail.com',new Date()));USER_MAP.put(2, new User(2,'test','test@gmail.com',new Date()));}public static void save(User user){USER_MAP.put(user.getId(), user);}public static User getById(Integer id){return USER_MAP.get(id);}public static List<User> getAll(){List<User> users = new ArrayList<User>(USER_MAP.values());return users;}public static void delete(Integer id){USER_MAP.remove(id);} }package com.sivalabs.resteasydemo;import java.util.List;import javax.ws.rs.DELETE;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.GenericEntity;import javax.ws.rs.core.MediaType;import javax.ws.rs.core.Response;import com.sivalabs.resteasydemo.MockUserTable;@Path('users')@Produces(MediaType.APPLICATION_XML)public class UserResource {@Path('')@GETpublic Response getUsersXML() {List<User> users = MockUserTable.getAll();GenericEntity<List<User>> ge = new GenericEntity<List<User>>(users){};return Response.ok(ge).build();}@Path('{id}')@GETpublic Response getUserXMLById(@PathParam('id') Integer id) {return Response.ok(MockUserTable.getById(id)).build();}@Path('')@POSTpublic Response saveUser(User user) {MockUserTable.save(user);return Response.ok('<status>success<status>').build();}@Path('{id}')@DELETEpublic Response deleteUser(@PathParam('id') Integer id) {MockUserTable.delete(id);return Response.ok('<status>success<status>').build();}}

步驟#6:使用JUnit TestCase測試REST Web服務。

package com.sivalabs.resteasydemo;import java.util.List;import org.jboss.resteasy.client.ClientRequest;import org.jboss.resteasy.client.ClientResponse;import org.jboss.resteasy.util.GenericType;import org.junit.Assert;import org.junit.Test;import com.sivalabs.resteasydemo.User;public class UserResourceTest {static final String ROOT_URL = 'http:localhost:8080resteasy-demorest';@Testpublic void testGetUsers() throws Exception {ClientRequest request = new ClientRequest(ROOT_URL+'users');ClientResponse<List<User>> response = request.get(new GenericType<List<User>>(){});List<User> users = response.getEntity();Assert.assertNotNull(users);}@Testpublic void testGetUserById() throws Exception {ClientRequest request = new ClientRequest(ROOT_URL+'users1');ClientResponse<User> response = request.get(User.class);User user = response.getEntity();Assert.assertNotNull(user);}@Testpublic void testSaveUser() throws Exception {User user = new User();user.setId(3);user.setName('User3');user.setEmail('user3@gmail.com');ClientRequest request = new ClientRequest(ROOT_URL+'users');request.body('applicationxml', user);ClientResponse<String> response = request.post(String.class);String statusXML = response.getEntity();Assert.assertNotNull(statusXML);}@Testpublic void testDeleteUser() throws Exception {ClientRequest request = new ClientRequest(ROOT_URL+'users2');ClientResponse<String> response = request.delete(String.class);String statusXML = response.getEntity();Assert.assertNotNull(statusXML);}}

步驟#7:要測試REST服務,我們可以使用REST客戶端工具。
您可以在http://code.google.com/a/eclipselabs.org/p/restclient-tool/下載REST客戶端工具。

重要注意事項:
1.應當先注冊org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap監聽器。

2.如果HttpServletDispatcher Servlet URL模式不是/ *,則應該配置resteasy.servlet.mapping.prefix <context-param>

繼續本教程的第二部分 。

參考: RESTEasy教程第1部分:我的JCG合作伙伴 Siva Reddy的基礎知識,來自My Experiments on Technology博客。


翻譯自: https://www.javacodegeeks.com/2012/06/resteasy-tutorial-part-1-basics.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372670.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372670.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372670.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php函數相關函數,PHP數組相關函數匯總

這篇文章主要介紹了PHP數組相關函數,匯總說明了php中相關的數組,具有一定參考借鑒價值,需要的朋友可以參考下本文總結了PHP數組相關的函數。分享給大家供大家參考。具體如下&#xff1a;這里包括函數名和用法說明&#xff0c;沒有詳細的代碼范例。感興趣的朋友可以查閱本站相關…

Web Magic 總體架構

1.2 總體架構 WebMagic的結構分為Downloader、PageProcessor、Scheduler、Pipeline四大組件&#xff0c;并由Spider將它們彼此組織起來。這四大組件對應爬蟲生命周期中的下載、處理、管理和持久化等功能。WebMagic的設計參考了Scapy&#xff0c;但是實現方式更Java化一些。 而S…

L1-006. 連續因子

一個正整數N的因子中可能存在若干連續的數字。例如630可以分解為3*5*6*7&#xff0c;其中5、6、7就是3個連續的數字。給定任一正整數N&#xff0c;要求編寫程序求出最長連續因子的個數&#xff0c;并輸出最小的連續因子序列。 輸入格式&#xff1a; 輸入在一行中給出一個正整數…

基于Java JAAS表單的身份驗證

使用JAAS實現登錄模塊是一個高級主題&#xff0c;而且大多數開發人員也很少有機會參與這種開發。 但是JAAS登錄模塊的基本實現并不是那么困難&#xff0c;這是因為我打算將其發布。 在這里&#xff0c;我正在解釋如何實現tomcat管理的身份驗證模塊。 此實現與容器無關。 我們可…

java自動投票代碼,Java 投票(自動添一)

Java 投票(自動加一)數據庫建立&#xff1a;SQL> create table vote(2 id number,3 name varchar(200),4 num number5 );//index.jsppageEncoding"utf-8"%>投票Connection conn1 null;Statement stmt1 null;ResultSet rs1 null;try {Class.forName("or…

SpringMVC搭建+實例

想做一點自己喜歡的東西&#xff0c;研究了一下springMVC,所以就自己搭建一個小demo,可供大家吐槽。 先建一個WEB工程&#xff0c;這個相信大家都會&#xff0c;這里不在多說。去網上下載spring jar包&#xff0c;然后在WEB-INF下新建一個lib文件&#xff0c;將下載的jar包放進…

Mockito和Hamcrest的試駕制造商

過去&#xff0c;很多人問我是否測試吸氣劑和吸氣劑&#xff08;屬性&#xff0c;屬性等&#xff09;。 他們還問我是否測試我的建筑商。 在我看來&#xff0c;答案取決于情況。 當使用遺留代碼時&#xff0c;我不會費心去測試數據結構&#xff0c;這意味著對象只帶有getter和s…

php8更新,PHP 8 中新特性以及重大調整

PHP 8&#xff0c;PHP 的一個新的大版本&#xff0c;預計將于2020年12月3日發布&#xff0c;這意味著將不會有 PHP 7.5 版本。PHP8目前正處于非常活躍的開發階段&#xff0c;所以在接下來的幾個月里&#xff0c;情況可能會發生很大的變化。在這篇文章中&#xff0c;我會維持一個…

Javascript學習之函數(function)

http://www.cnblogs.com/royalroads/p/4418587.html 在JS中,Function(函數)類型實際上是對象;每個函數都是Function類型的實例&#xff0c;而且都與其他引用類型一樣具有屬性和方法。由于函數是對象,因此函數名實際上也是一個指向函數對象的指針。 一 函數的聲明方式 //1.函數聲…

jquery彈出可關閉遮罩提示框

jquery CSS3遮罩彈出層動畫效果&#xff0c;使用非常簡單&#xff0c;就兩個標簽&#xff0c;里面自定義內容和樣式&#xff0c;四種常見效果&#xff0c;懂的朋友還可以修改源代碼修改成自己想要的效果效果展示 http://hovertree.com/texiao/jquery/85/代碼如下&#xff1a; &…

用于Spring JPA2后端的REST CXF

在本演示中&#xff0c;我們將使用spring / jpa2后端生成一個REST / CXF應用程序。 該演示演示了分鐘項目的軌跡REST-CXF 。 演示2中的模型保持不變。 濃縮保持不變。 但是軌道改變了 添加的是2層&#xff1a; 在JPA2之上具有彈簧集成的DAO層 具有JAX-RS批注的REST-CXF層…

php與服務器關系,php與web服務器關系

1.什么是cgi程序&#xff0c;cgi與fastcgi的區別CGI的中文名稱是通用網關接口&#xff0c;是外部應用程序與web服務器之間的接口標準。CGI規范允許web服務器執行外部程序&#xff0c;并將它們的輸出發送給web瀏覽器。而fastcgi則是一個常駐型的cgi&#xff0c;它可以一直執行著…

POJ 3468 A Simple Problem with Integers(線段樹:區間更新)

http://poj.org/problem?id3468 題意&#xff1a; 給出一串數&#xff0c;每次在一個區間內增加c&#xff0c;查詢[a,b]時輸出a、b之間的總和。 思路&#xff1a; 總結一下懶惰標記的用法吧。 比如要對一個區間范圍內的數都要加c&#xff0c;在找到這個區間之后&#xff0c;本…

php 新浪url,PHP?URL函數詳解

php url函數:parse_url()parse_url(PHP 3, PHP 4, PHP 5)parse_url -- 解析 URL&#xff0c;歸來其構成局部解釋array parse_url ( string url )本函數解析一個 URL 并歸來一個關系數組&#xff0c;包括在 URL 中揭示的各種構成局部。本函數不是用來檢討給定 URL 的合法性的&am…

完整的WebApplication JSF EJB JPA JAAS –第1部分

這篇文章將是迄今為止我博客中最大的一篇文章&#xff01; 我們將看到完整的Web應用程序。 最新的技術將完成此工作&#xff08;直到今天&#xff09;&#xff0c;但是我將給出一些提示以顯示如何使本文適用于較舊的技術。 在本文的結尾&#xff0c;您將找到要下載的源代碼。 您…

Ajax和JavaScript的區別

javascript是一種在瀏覽器端執行的腳本語言&#xff0c;Ajax是一種創建交互式網頁應用的開發技術 &#xff0c;它是利用了一系列相關的技術其中就包括javascript。Javascript是由網景公司開發的一種腳本語言&#xff0c;它和sun公司的java語言是沒有任何關系的&#xff0c;它們…

大一

以后準備開始ACM的題目啦轉載于:https://www.cnblogs.com/Aiden-/p/6562038.html

概念驗證:玩! 構架

我們正在開始一個新項目&#xff0c;我們必須選擇Web框架。 我們的默認選擇是grails&#xff0c;因為團隊已經擁有使用它的經驗&#xff0c;但是我決定給Play&#xff01; 和Scala有機會。 玩&#xff01; 有很多很酷的東西&#xff0c;在我的評估中&#xff0c;它得到了很多加…

ldap統一用戶認證php,針對LDAP服務器進行身份認證

Symfony提供了不同的方法來配合LDAP服務器使用。Security組件提供&#xff1a;ldap user provider&#xff0c;使用的是form_login_ldap authentication provider&#xff0c;用于針對一臺使用了表單登錄的LDAP服務器。同所有其他user provider一樣&#xff0c;它可以同任何aut…

每天CookBook之JavaScript-039

IIFE的使用<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>039</title> </head> <body></body> <script type"text/javascript"> (function () {var i 0;fu…