Dropwizard:轻松的RESTful JSON HTTP Web服务

寻求快速, 轻松地创建可用于生产环境的RESTful JSON HTTP Web服务的Java开发人员应该考虑Dropwizard框架。 Dropwizard汇集了相互补充的广受好评的库,因此您可以了解重要的内容:编写和交付工作代码。 对于那些对所用库的详细信息感兴趣的人,请参阅Dropwizard概述 。 幸运的是,Dropwizard不会使您处理其所有单个组件。 您将可以专注于手头的工作。 如果您有时间,请坚持学习,让我们与Dropwizard一起做点事情。

可以在GitHub上获得本教程的所有代码。

如何开始使用Dropwizard?

一个Maven,Gradle或Ivy依赖项将为您提供制作Dropwizard支持的Web服务所需的所有组件。

<dependency><groupId>com.yammer.dropwizard</groupId><artifactId>dropwizard-core</artifactId><version>0.6.2</version>
</dependency>

注意 :如果您发现本简短的帖子中没有充分解释的内容,请参考Dropwizard的出色文档 。

我们要做什么?

让我们做一个Web服务,它返回给定时区的当前日期和时间。 如果客户端决定不指定默认时区,我们将使用可配置的默认时区。

组态

我们的超级简单的time-service.yml配置文件如下所示。

defaultTimezone: UTC

在后台,Dropwizard将加载,解析,验证并将该配置转换为对象。 我们需要做的就是将其指定为类。

public class TimezoneConfiguration extends Configuration {@NotEmpty@JsonPropertyprivate String defaultTimezone;public String getDefaultTimezone() { return defaultTimezone; }
}

服务输出

假设我们希望Web服务的输出看起来像这样。

{ "time": "2014-02-04 13:45:02" }

相应的类很简单。

public class Time {private final String time;public Time(String time) {this.time = time;}public String getTime() { return time; }
}

资源资源

接下来,我们决定将Web服务的URL路径设置为/time 。 并且我们需要指定资源将返回JSON。 将这些放在一起可以为我们提供这一切。

@Path("/time")
@Produces(MediaType.APPLICATION_JSON)
public class TimeResource {
}

现在,对于我们的演示Web服务而言,唯一有意义的RESTful操作是GET ,因此让我们为它创建一个方法。 使用我们的Web服务时,客户端可以提供时区作为查询字符串参数。

@GET
public Time getTime(@QueryParam("timezone") String timezone) {
}

这使我们还有三件事要做:

  1. 从客户端处理给定的时区
  2. 如果没有给出默认时区
  3. 用时区格式化当前日期和时间
@Path("/time")
@Produces(MediaType.APPLICATION_JSON)
public class TimeResource {private final String defaultTimezone;public TimeResource(String defaultTimezone) {this.defaultTimezone = defaultTimezone;}@GETpublic Time getTime(@QueryParam("timezone") Optional timezone) {DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");TimeZone timeZone = TimeZone.getTimeZone(timezone.or(defaultTimezone));formatter.setTimeZone(timeZone);String formatted = formatter.format(new Date());return new Time(formatted);}
}

服务

现在,让我们将我们的Web服务的所有部分整合到我们称为TimeService入口点类中。 在这里,我们将使用TimezoneConfiguration将默认时TimezoneConfiguration传递给TimeResource

public class TimeService extends Service {public static void main(String[] args) throws Exception {new TimeService().run(args);}@Overridepublic void run(TimezoneConfiguration config, Environment environment) {String defaultTimezone = config.getDefaultTimezone();TimeResource timeResource = new TimeResource(defaultTimezone);environment.addResource(timeResource);}@Overridepublic void initialize(Bootstrap timezoneConfigurationBootstrap) {}
}

铅笔下来

而已! 我们刚刚编写了一个基于Dropwizard的Web服务,但没有引起人们的注意,也没有成堆的老式XML配置。

跑步

运行Web服务就像执行命令行Java应用程序一样简单-无需担心.war文件或servlet容器。

java -cp libraries/* name.christianson.mike.TimeService server time-service.yml

现在,将您的Web浏览器指向http://localhost:8080/time?timezone=MST或卷曲一下,玩得开心!

  • 可以在GitHub上获得本教程的所有代码。

翻译自: https://www.javacodegeeks.com/2014/04/dropwizard-painless-restful-json-http-web-services.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

split 将字符串分割成字符串数组

list_name list_name.split(","); split() 方法用于把一个字符串分割成字符串数组。 语法 stringObject.split(separator,howmany) 参数描述separator 必需。字符串或正则表达式&#xff0c;从该参数指定的地方分割 stringObject。howmany …

python可以自动写文章吗_让python来告诉你神奇的操作,如何实现文章自动化

三河讲python首先来告诉大家下面的Python程序实现了通过从网页抓取一篇文章&#xff0c;然后根据这篇文章来生成新的文章&#xff0c;这其中的原理就是基于概率统计的文本分析。过程大概就是网页抓取数据->统计分析->生成新文章。网页抓取数据是通过BeautifulSoup库来抓取…

badboy的录制和jmeter的使用

v Jmeter是什么 Apache Jmeter是Apache组织开发的基于Java的压力测试工具。Jmeter可以用于对服务器、网络或对象模拟巨大的负载&#xff0c;来自不同压力类别下测试它们的强度和分析整体性能。另外&#xff0c;Jmeter能够对应用程序做功能、回归测试&#xff0c;通过创建带有断…

一张图看懂offsetX, clientX, pageX, screenX的区别

1.具体含义见下图1 2.浏览器的兼任情况 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

接口一个被我忽略的地方--接口重定向技术

习惯于用IDE生成接口方法了,右键点击"Implement Interface",生成所有的接口方法声明,还带个Region多方便啊.今天看<<CLR Vir C#>>时才了解到自己是知其然不知其所有然啊. 实现接口方法很简单,新手估计也都会,但怎么理解这个过程,不见得所有人都知道 Base…

java extends throws_继承,方法签名,方法重写和throws子句

容易记住访问修饰符可以从限制更改为限制更少&#xff0c;例如从受保护到公共&#xff0c;但反之亦然throws签名可以是从父异常更改为子异常类&#xff0c;但反之亦然此代码有效public class A {protected String foo() throws Exception{return "a";}class B extend…

[BZOJ]4071: [Apio2015]巴邻旁之桥

题解: 首先 明确 如果处于同一区域时 直接统计贡献即可 不用过桥 对k分情况讨论: 当k1时 假设桥的位置是 p 那么 $$ \sum_{i1}^n |x_i-p||y_i-p| $$ 很显然当对于 所有x,y排序后的中位数是最优的选择位置 具体证明可以模拟一下 当k2时 假设桥的位置是$p_1$和$p_2$ $$ \su…

vue 学习之路 —— 图片的引入

问题记录&#xff1a;在img中动态设置了src后&#xff0c;图片路径找不到 原因&#xff1a;vue中动态生成的路径无法被url-loader解析到 解决方法&#xff1a; 1、将图片放在static文件夹&#xff0c;然后正常解析 2、将图片使用import方法引入 3、 采用背景图做法&#xff0c;…

跟踪异常–第5部分–使用Spring进行计划

看来我终于快要结束本系列有关使用Spring进行错误跟踪的博客了&#xff0c;对于那些还没有阅读该系列博客的人&#xff0c;我正在编写一个简单但几乎具有工业实力的Spring应用程序&#xff0c;扫描日志文件中的异常&#xff0c;然后生成报告。 在本系列的第一个博客中&#xff…

java.util.hashmap_java.util.HashMap中的无限循环

我在这里经常有一些Vaadin代码阻塞,我不知道问题是什么&#xff1a;Thread 7892: (state IN_JAVA)- java.util.HashMap.getEntry(java.lang.Object) bci61, line349 (Compiled frame; information may be imprecise)- java.util.HashMap.containsKey(java.lang.Object) bci2, …

APP测试理论知识点

什么是APP测试&#xff1f; App测试就是软件工程师对这类应用软件进行功能测试&#xff0c;性能测试&#xff0c;安全性测试以及兼容性测试等。 对于app测试我们一般采用的是黑盒测试方法&#xff0c;也会在必要的时候进行自动化测试以及性能测试&#xff0c;丙炔对于app还会有…

超大超长图片居中显示且放大缩小无影响

1. 超大图片居中显示 1.1 放大缩小都居中显示 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>body {overflow-x: hidden;}.top-banner .banner-list a {display: b…

蘋果的秘密武器

蘋果公司(Apple)在電腦操作平台之戰中負於微軟公司 (Microsoft)已經過去很多年了。如今﹐90%以上的筆記本電腦和台式電腦在使用微軟的Windows操作系統。然而近幾年來﹐蘋果公司對Windows主宰的世界發起突然襲擊﹐它的武器就是Windows版的iTunes﹐一個免費的媒體管理、儲存和播放…

如何使用NodeManager来控制WebLogic Server

在上一篇文章中 &#xff0c;您已经了解了如何启动WebLogic管理员和多个托管服务器。 该指令的一个缺点是这些进程将从前台开始&#xff0c;而STDOUT则打印在终端上。 如果打算将这些服务器作为后台服务运行&#xff0c;则可能需要尝试使用WebLogic节点管理器wlscontrol.sh工具…

php接口开发 安全_PHP开发api接口安全验证的实例讲解

php的api接口在实际工作中&#xff0c;使用PHP写api接口是经常做的&#xff0c;PHP写好接口后&#xff0c;前台就可以通过链接获取接口提供的数据&#xff0c;而返回的数据一般分为两种情况&#xff0c;xml和json,在这个过程中&#xff0c;服务器并不知道&#xff0c;请求的来源…

树:重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建二叉树并返回。 /// 1/// …

css随堂笔记(一)

Css初体验第一天 1 css初识&#xff1a;css主要用于设置HTML页面中文本内容&#xff0c;图片的外形&#xff0c;以及版面的布局等外观显示样式 Css样式规范&#xff1a;h1{属性&#xff1a;值} 2 css的三总书写方式&#xff1a;1 行内样式 将样式写在标签里面,只能作用于当前标…

关于全排列

嗯... 关于全排列&#xff0c;有很多种种做法... 嗯.... 那什么叫全排列呢&#xff1f;&#xff1f;&#xff01;&#xff01; 从n个不同元素中任取m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排列起来&#xff0c;叫做从n个不同元素中取出m个元素的一个排…

[Java]如何安排任务间隔运行

应用程序中经常需要在后台运行某些特定任务以在一定间隔内完成某些工作。 该示例可以是&#xff0c;服务在后台运行以清理应用程序&#xff0c;就像我们有Java Garbage集合一样。 在本文中&#xff0c;我将向您展示3种不同的方法来实现这一目标 他们如下 使用简单的线程 使…

Sky Line 与 ArcEngine的粘合剂 Composite UI AB?

如今的goverment领导们觉得地图都太抽象&#xff0c;只有google Earth式的应用能引起他们的兴趣&#xff0c;作为为公仆服务的我们自然要学习掌握3D GIS技术来提高zf的执政能力了&#xff0c;于是Sky Line来了&#xff0c;拿到开发手册的时候觉得接口不多应该很容易开发&#x…