RESTEasy教程第2部分:Spring集成

RESTEasy提供了對Spring集成的支持,這使我們能夠將Spring bean作為RESTful WebServices公開。

步驟#1:使用Maven配置RESTEasy + Spring依賴項。
<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><properties><project.build.sourceEncoding>UTF-8<project.build.sourceEncoding><org.springframework.version>3.1.0.RELEASE<org.springframework.version><slf4j.version>1.6.1<slf4j.version><java.version>1.6<java.version><junit.version>4.8.2<junit.version><resteasy.version>2.3.2.Final<resteasy.version><properties><build><finalName>resteasy-demo<finalName><build><dependencies><dependency><groupId>junit<groupId><artifactId>junit<artifactId><scope>test<scope><dependency><dependency><groupId>org.slf4j<groupId><artifactId>slf4j-api<artifactId><version>${slf4j.version}<version><dependency><dependency><groupId>org.slf4j<groupId><artifactId>jcl-over-slf4j<artifactId><version>${slf4j.version}<version><scope>runtime<scope><dependency><dependency><groupId>org.slf4j<groupId><artifactId>slf4j-log4j12<artifactId><version>${slf4j.version}<version><scope>runtime<scope><dependency><dependency><groupId>log4j<groupId><artifactId>log4j<artifactId><version>1.2.16<version><scope>runtime<scope><dependency><dependency><groupId>org.springframework<groupId><artifactId>spring-context-support<artifactId><version>${org.springframework.version}<version><exclusions><exclusion><artifactId>commons-logging<artifactId><groupId>commons-logging<groupId><exclusion><exclusions><dependency><dependency><groupId>org.springframework<groupId><artifactId>spring-web<artifactId><version>${org.springframework.version}<version><dependency><dependency><groupId>org.jboss.resteasy<groupId><artifactId>resteasy-jaxrs<artifactId><version>${resteasy.version}<version><scope>provided<scope><dependency><dependency><groupId>org.jboss.resteasy<groupId><artifactId>resteasy-jaxb-provider<artifactId><version>${resteasy.version}<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.jboss.resteasy<groupId><artifactId>resteasy-spring<artifactId><version>2.3.0.GA<version><exclusions><exclusion><artifactId>commons-logging<artifactId><groupId>commons-logging<groupId><exclusion><exclusion><artifactId>org.jboss.resteasy<artifactId><groupId>resteasy-jaxb-provider<groupId><exclusion><exclusion><artifactId>jaxb-impl<artifactId><groupId>com.sun.xml.bind<groupId><exclusion><exclusion><artifactId>sjsxp<artifactId><groupId>com.sun.xml.stream<groupId><exclusion><exclusion><artifactId>jsr250-api<artifactId><groupId>javax.annotation<groupId><exclusion><exclusion><artifactId>resteasy-jaxb-provider<artifactId><groupId>org.jboss.resteasy<groupId><exclusion><exclusion><artifactId>activation<artifactId><groupId>javax.activation<groupId><exclusion><exclusions><dependency><dependency><groupId>javax.servlet<groupId><artifactId>servlet-api<artifactId><version>2.5<version><scope>provided<scope><dependency><dependency><groupId>org.apache.httpcomponents<groupId><artifactId>httpclient<artifactId><version>4.1.2<version><dependency><dependencies><project>

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

<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><listener><listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener<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>contextConfigLocation<param-name><param-value>classpath:applicationContext.xml<param-value><context-param><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:創建Spring Service類UserService并更新UserResource以使用UserService bean。

package com.sivalabs.resteasydemo;import java.util.List;import org.springframework.stereotype.Service;import com.sivalabs.resteasydemo.MockUserTable;@Servicepublic class UserService {public void save(User user){MockUserTable.save(user);}public User getById(Integer id){return MockUserTable.getById(id);}public List<User> getAll(){return MockUserTable.getAll();}public void delete(Integer id){MockUserTable.delete(id);}}package com.sivalabs.resteasydemo;import java.util.List;import javax.ws.rs.Consumes;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 org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Component@Path('users')@Produces(MediaType.APPLICATION_XML)@Consumes(MediaType.APPLICATION_XML)public class UserResource {@Autowiredprivate UserService userService;@Path('')@GETpublic Response getUsersXML() {List<User> users = userService.getAll();GenericEntity<List<User>> ge = new GenericEntity<List<User>>(users){};return Response.ok(ge).build();}@Path('{id}')@GETpublic Response getUserXMLById(@PathParam('id') Integer id) {User user = userService.getById(id);return Response.ok(user).build();}@Path('')@POSTpublic Response saveUser(User user) {userService.save(user);return Response.ok('<status>success<status>').build();}@Path('{id}')@DELETEpublic Response deleteUser(@PathParam('id') Integer id) {userService.delete(id);return Response.ok('<status>success<status>').build();}}package com.sivalabs.resteasydemo;import java.util.List;import org.springframework.stereotype.Service;import com.sivalabs.resteasydemo.MockUserTable;@Servicepublic class UserService {public void save(User user){MockUserTable.save(user);}public User getById(Integer id){return MockUserTable.getById(id);}public List<User> getAll(){return MockUserTable.getAll();}public void delete(Integer id){MockUserTable.delete(id);}}package com.sivalabs.resteasydemo;import java.util.List;import javax.ws.rs.Consumes;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 org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Component@Path('users')@Produces(MediaType.APPLICATION_XML)@Consumes(MediaType.APPLICATION_XML)public class UserResource {@Autowiredprivate UserService userService;@Path('')@GETpublic Response getUsersXML() {List<User> users = userService.getAll();GenericEntity<List<User>> ge = new GenericEntity<List<User>>(users){};return Response.ok(ge).build();}@Path('{id}')@GETpublic Response getUserXMLById(@PathParam('id') Integer id) {User user = userService.getById(id);return Response.ok(user).build();}@Path('')@POSTpublic Response saveUser(User user) {userService.save(user);return Response.ok('<status>success<status>').build();}@Path('{id}')@DELETEpublic Response deleteUser(@PathParam('id') Integer id) {userService.delete(id);return Response.ok('<status>success<status>').build();}}applicationContext.xml<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http:www.springframework.orgschemabeans'xmlns:xsi='http:www.w3.org2001XMLSchema-instance'xmlns:p='http:www.springframework.orgschemap'xmlns:context='http:www.springframework.orgschemacontext'xsi:schemaLocation='http:www.springframework.orgschemabeans http:www.springframework.orgschemabeansspring-beans.xsdhttp:www.springframework.orgschemacontext http:www.springframework.orgschemacontextspring-context.xsd'><context:annotation-config><context:component-scan base-package='com.sivalabs.resteasydemo'><beans>

步驟#4:使用相同的JUnit TestCase來測試第1部分中描述的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);}}

重要注意事項:

1.應當先注冊org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap監聽器。
2.如果HttpServletDispatcher Servlet URL模式不是/ *,則應該配置resteasy.servlet.mapping.prefix @lt; context-param>
3.您應該通過使用@Component或@Service注釋將REST Resource注冊為Spring bean。

參考: RESTEasy教程第2部分:我的JCG合作伙伴 Siva Reddy在“ 技術上的我的實驗”博客上的 Spring Integration 。


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

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

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

相關文章

java RSA 加簽驗簽【轉】

引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/ java RSA 加簽驗簽 package com.testdemo.core.service.impl.alipay;import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.PK…

mysql啟動時執行sql server_常見 mysql 啟動、運行.sql 文件錯誤處理

1、mysql 啟動錯誤處理查看 log&#xff1a;Mac: /usr/local/var/mysql/lizhendeMacBook-Pro.local.err根據 log 針對性的進行調整&#xff0c;包治百病2、Mysql Incorrect datetime value問題描述&#xff1a;低版本的 mysql 中&#xff0c;數據庫轉儲 sql 文件。導入到高版本…

帶有謂詞的Java中的函數樣式-第2部分

在本文的第一部分中&#xff0c;我們介紹了謂詞&#xff0c;這些謂詞通過具有返回true或false的單個方法的簡單接口&#xff0c;為Java等面向對象的語言帶來了函數式編程的某些好處。 在第二部分和最后一部分中&#xff0c;我們將介紹一些更高級的概念&#xff0c;以使您的謂詞…

Devxtreme 顯示Master-Detail數據列表, 數據顯示顏色

1 ////刷新3/4簇Grid2 //function GetClusterGrid(id, coverageId, clusterId) {3 4 // var region getRegionCityName();5 // $.ajax({6 // type: "POST",7 // url: "fast_index_overview.aspx/GetClusterGrid&q…

mysql 排序去重復_php mysql 過濾重復記錄并排序

table1idname1a2b3ctable2idnamecont1aaa2bbb3aaaaaSELECT*,count(distincttable2.name)FROMtable1,table2WHEREtable1.nametable2.nameGROUPBYtable2.nameORDERBYtable2.idDESC";重復...table1id name1 a2 b3 ctable2id name cont1 a aa2 b bb3 a aaaaSELECT *,count(dis…

Java EE 6測試第I部分– EJB 3.1可嵌入API

我們從Enterprise JavaBeans開發人員那里聽到的最常見的請求之一就是需要改進的單元/集成測試支持。 EJB 3.1 Specification引入了EJB 3.1 Embeddable API&#xff0c;用于在Java SE環境中執行EJB組件。 與傳統的基于Java EE服務器的執行不同&#xff0c;可嵌入式用法允許客戶端…

Flume 中文入門手冊

原文&#xff1a;https://cwiki.apache.org/confluence/display/FLUME/GettingStarted 什么是 Flume NG? Flume NG 旨在比起 Flume OG 變得明顯更簡單。更小。更easy部署。在這樣的情況下&#xff0c;我們不提交Flume NG 到 Flume OG 的后向兼容。當前。我們期待來自感興趣測試…

原生JavaScript+CSS3實現移動端滑塊效果

在做web頁面時&#xff0c;無論PC端還是移動端&#xff0c;我們會遇到滑塊這樣的效果&#xff0c;可能我們往往會想著去網上找插件&#xff0c;其實這個效果非常的簡單&#xff0c;插件代碼的的代碼往往過于臃腫&#xff0c;不如自己動手&#xff0c;自給自足。首先看一下效果圖…

mysql的連接名是哪個文件_mysql連接名是什么

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航&#xff0c;為用戶…

Activiti績效對決

每個人在學習Activiti時都會一直問到的問題&#xff0c;與軟件開發本身一樣古老&#xff1a;“它如何執行&#xff1f;”。 到現在為止&#xff0c;當您問我同樣的問題時&#xff0c;我將告訴您Activiti如何以各種可能的方式最小化數據庫訪問&#xff0c;如何將流程結構分解為“…

怎么使用CKEDITOR

出于工作需求&#xff0c;自己在網上找了個文本編輯器控件, 網址是http://ckeditor.com/ 怎么使用&#xff1f; 先插入腳本<script type"text/javascript" src"*/ckeditor.js"></script>, 然后&#xff0c;在自己的腳本里調用CKEDITOR.replac…

centos 打開pdo_mysql_centos中添加php擴展pdo_mysql步驟

pdo_mysql是php中一個mysql連接類了&#xff0c;我們可以直接使用pdo_mysql來操作數據庫這樣自己可以不需要寫數據庫操作類了&#xff0c;下面來介紹在centos中安裝pdo_mysql擴展的步驟。本文內容是以 CentOS 為例&#xff0c;紅帽系列的 Linux 方法應該都是如此&#xff0c;下…

Java線程死鎖–案例研究

本文將描述從在IBM JVM 1.6上運行的Weblogic 11g生產系統中觀察到的最新Java死鎖問題的完整根本原因分析。 此案例研究還將證明掌握線程轉儲分析技能的重要性&#xff1b; 包括用于IBM JVM Thread Dump格式。 環境規格 – Java EE服務器&#xff1a;Oracle Weblogic Server 1…

bzoj1968: [Ahoi2005]COMMON 約數研究

水題。。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(i,s,t) for(int is;i<t;i) int main(){int ans0,n;scanf("%d",&n);rep(i,1,n) ansn/i;printf("%d\n…

題目1457:非常可樂(廣度優先遍歷BFS)

題目鏈接&#xff1a;http://ac.jobdu.com/problem.php?pid1457 詳解鏈接&#xff1a;https://github.com/zpfbuaa/JobduInCPlusPlus 參考代碼&#xff1a; // // 1457 非常可樂.cpp // Jobdu // // Created by PengFei_Zheng on 22/04/2017. // Copyright © 2017 Pe…

mysql查詢某張表的所有外鍵_oracle中查詢所有外鍵引用到某張表的記錄

歡迎進入Oracle社區論壇&#xff0c;與200萬技術人員互動交流 >>進入 oracle中查詢所有外鍵引用到某張表的記錄 //查詢表的主鍵約束名 select * from user_constraints e where e.table_name表名;--輸入 //查詢所有引用到該主鍵的記錄 select b.table_name,b.column_歡迎…

BTrace for Java應用程序簡介

本文的目的是學習如何使用BTrace動態跟蹤/觀察正在運行的Java應用程序&#xff08;JDK 6&#xff09;&#xff0c;而無需更改應用程序的代碼和配置參數。 什么是BTrace&#xff1f; BTrace是一個開源項目&#xff0c;始于2007年&#xff0c;最初由A.Sundararajan和K.Balasubra…

叢銘俁 160809324 (作業1)

老師&#xff0c;助教好&#xff01;我是計科3班的叢銘俁&#xff0c;我的性格陽光開朗&#xff0c;待人大方友善&#xff0c;凡事不喜歡斤斤計較&#xff1b;本人熱心&#xff0c;喜歡樂于助人&#xff0c;也喜歡和積極向上的人交朋友。最喜歡打羽毛球&#xff0c;其次是籃球&…

mysql死鎖分析_MySQL死鎖分析

熟悉或者了解數據庫的朋友都知道鎖的概念&#xff0c;這里不做過多的解析&#xff01;鎖的種類有很多&#xff0c;不同數據庫的鎖管理方式也不同。這里主要談下MySQL innodb引擎下的死鎖。死鎖通俗的來講就是2個事務相互請求對方持有的鎖&#xff0c;這樣就會造成2個事務相互等…

在Akka中實現主從/網格計算模式

主從模式是容錯和并行計算的主要示例。 模式背后的想法是將工作劃分為相同的子任務&#xff0c;然后將其委派給從屬。 這些從節點或實例將處理工作任務&#xff0c;并將結果發送回主節點。 然后主節點將編譯從所有從節點接收到的結果。關鍵是從節點僅知道如何處理任務&#xff…