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.mzph.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…