resteasy学习
概述
最近项目想要重构api调用,由原来传统soap rpc web service 重构为restful web service.
在众多的rest架构中,Jersey,Resteasy,Restlet,Apache CXF, 考虑到集成能力,稳定性,安全性,易用性,维护以及配置,选择Resteasy.Resteasy是JBoss的一个开源项目,是ax-rs规范的一个完整实现,其开发易上手.
demo
开始搭建一个helloworld.
准备:jdk8
pom.xml
<!--resteasy --><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jaxrs</artifactId><version>3.1.3.Final</version></dependency>
不使用application
web.xml
<!-- Auto scan REST service 扫描注册rest服务--> <context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>resteasy.resources</param-name> <param-value>stu.resteasy.TestResource</param-value> </context-param> <!-- this need same with resteasy ser
vlet url-pattern 访问目录,要与servle-mapping对应,可不设--> <context-param> <param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/rest</param-value> </context-param> <!--listener 监听器--><listener> <listener-class> org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap </listener-class> </listener> <!--servlet--><servlet> <servlet-name>resteasy-servlet</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class> </servlet> <servlet-mapping> <servlet-name>resteasy-servlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
此段注释掉也能成功
<context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param>
官方注释:Automatically scan WEB-INF/lib jars and WEB-INF/classes directory for both @Provider and JAX-RS resource classes (@Path, @GET, @POST etc..) and register them
注释掉或者设置为false,还是会成功,后来才知道这个resteasy.scan在3.0版本后已经过时了,现在resource可以自扫描.推荐Use a servlet 3.0 container and the ResteasyServletInitializer.
配置资源
package stu.resteasy;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response; @Path("/testResource")
public class TestResource { @GET @Path("/{param}") public Response printMessage(@PathParam("param") String msg) { String result = "Restful example : " + msg; return Response.status(200).entity(result).build(); } }
访问:localhost:8080/ rest/helloworld
打印:helloworld
基于application控制
web.xml
<!-- this need same with resteasy servlet url-pattern 访问目录,要与servle-mapping对应,可不设--> <context-param> <param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/rest</param-value> </context-param> <!--servlet--><servlet> <servlet-name>resteasy-servlet</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>stu.resteasy.TestApplication</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>resteasy-servlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
以上可配置多个
application
package stu.resteasy;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;@ApplicationPath("/rest")
public class TestApplication extends Application { private static Set<Class<?>> classes = new HashSet<Class<?>>();@Overridepublic Set<Class<?>> getClasses() {//注册服务,可注册多个classes.add(TestResource.class);classes.add(TestResourceA.class);return classes;}
}
此处的@ApplicationPath主要设置resource的资源跟路径
http://localhost:8080/rest/testResource/helloworld
打印:helloworld
注意:
假如使用ResteasyServletInitializer(容器启动)容器启动空的web.xml,不需要配置任何配置,依赖注解@ApplicationPath
(ResteasyServletInitializer初始化将每个application生成servlet交于org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher)
ResteasyServletInitializer只支持servlet3.0以上,所以使用的servlet容器必须是3.0以上,比如jetty8.0,tomcat7.
resteasy学习相关推荐
- Dubbo + RestEasy 实现文件上传与下载
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Dubbo+RestEasy实现文件上传与下载 Dubbo+RestEasy实现文件上传与下载 Ma ...
- RestEasy编写API
我是从这篇文章学习的RESTEASY https://www.cnblogs.com/langtianya/p/7624647.html 1. 现实需求 任务:发送请求给服务器,解析请求,返回结果 请 ...
- RESTEasy 参数注解
https://www.cnblogs.com/chen-lhx/p/5599806.html 在第一RESTEasy教程我们已经学习了基本的Web服务和休息我们已经测试了一个简单的REST风格的We ...
- RestEasy 调用Rest接口使用详解
最近项目中需要调用其他项目的Rest接口,之前一直在使用Apache的httpclient工具,该工具使用起来不是很方便,各种try{......} catch{......}结构,造成了代码量很大, ...
- 带有RESTEasy + JAXB + Jettison的JSON示例
RESTEasy使用Jettison JSON库在JSON之间来回映射JAXB注释对象. 在本教程中,我们向您展示如何将带有JAXB注释的对象转换为JSON格式并将其返回给客户端. 杰克逊(Jac ...
- 使用RESTEasy 和 Jersey创建JAX-RS CRUD Rest Web服务
在本教程中,我们将学习如何使用 RESTEasy 和 Jersey 创建 JAX-RS Get.POST.PUT 和 DELETE Rest Web 服务. 我们将建造什么? 我们正在构建一个简单的 ...
- java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】
类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...
- Java EE学习心得
–Java EE学习心得 1. 称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...
- FastAI 2019课程学习笔记 lesson 2:自行获取数据并创建分类器
文章目录 数据获取 google_images_download 的安装和使用 挂载google 个人硬盘到Google colab中 删除不能打开文件 创建ImageDataBunch 训练模型 解 ...
最新文章
- Android之Fragment使用简介
- UA MATH566 统计理论10 Bootstrap简介
- ubuntu编译内核重启出现:gave up waiting for root device
- python正则表达式面试_【剑指offer】面试题19. 正则表达式匹配
- Angular面试题三
- 计算机osta试题,OSTA试题库.doc
- 瞎扯数学分析-微积分
- 怎么学ui设计入门?怎样才能少走弯路?
- 设计模式之观察者模式PHP实现
- Java基础知识总结(一)创建和销毁对象
- 区块链大本营专访 | MiiX全球技术开发者超级大赛,36小时,3支获胜队伍有哪些不一样的感受?
- python 经典图书排行榜_书榜 | 计算机书籍(1.7-1.13)销售排行榜
- EXCEL兼容性检查
- LXDE vs XFCE:哪个是更好的轻量级桌面环境?
- Requirement already satisfied:
- tree traversal (树的遍历) - postorder traversal (后序遍历)
- GPU计算主板学习资料保存第735篇:基于3U VPX的AGX Xavier GPU计算主板
- 《脚本》Python在线百度文库爬虫(免下载券)
- Jrebel+springboot2.0 启动失败问题
- python:python基础语法三,列表、元组、字典、集合
热门文章
- codevs 1507 酒厂选址 题解报告
- IntelliJ Idea 常用10款插件(提高开发效率)
- 寻找走失多年的儿童,这个算法让父母看到孩子长大的模样
- watching memory
- WordPress上传图片提示:服务器无法处理图像
- 基于JAVA房屋租赁网站计算机毕业设计源码+系统+lw文档+部署
- 汇编语言调试DEBUG命令
- linux用shell冒泡排序,Linux Shell冒泡排序
- A.图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)
- 【甄选靶场】Vulnhub百个项目渗透——项目三十三:Money-Heist-catch-me-if-you-can(密码学)