restful json_Dropwizard:轻松的RESTful JSON HTTP Web服务

restful json

寻求快速, 轻松地创建可用于生产环境的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

restful json

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

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

相关文章

1061 判断题(PAT乙级 C++)

题目 判断题的评判很简单&#xff0c;本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。 输入格式&#xff1a; 输入在第一行给出两个不超过 100 的正整数 N 和 M&#xff0c;分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数&#xff0c;是…

gem for onenote安装教程

https://www.xiazaiba.com/jiaocheng/52255.html

使用Java :: Geci生成setter和getter

在本文中 &#xff0c;我们创建了非常简单的hello-world生成器&#xff0c;以介绍框架以及通常如何生成生成器。 在本文中&#xff0c;我们将研究访问器生成器&#xff0c;它是在Java :: Geci的核心模块中定义的&#xff0c;它是商业级的&#xff0c;而不是仅用于演示的生成器。…

1062 最简分数(PAT乙级 C++)

题目 一个分数一般写成两个整数相除的形式&#xff1a;N/M&#xff0c;其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 N1/M​1​​ 和 N​2/M​2​​ &#xff0c;要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。 输…

使用xshell上传本地文件到服务器

1.查看linux上是否安装rz工具 2&#xff0c;查看安装是否完成&#xff0c;然后上传文件到服务器

ubuntu镜像下载

官方下载地址&#xff08;不推荐&#xff09; https://www.ubuntu.com/download 推荐使用 Ubuntu 20.04.4 LTS (Focal Fossa) 其余下载地址 中科大源 http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开源镜像站 http://mirrors.aliyun.com/ubuntu-releases/…

Dev-C++ 一直提示源文件未编译,原因及解决办法

原因 编译命令换行&#xff08;可能有的同学和我一样喜欢换行写&#xff09;&#xff0c;导致编译通不过&#xff0c;如果选择编译运行&#xff0c;便会提示"源文件未编译"。 如图 解决办法 这种写法不对&#xff0c;正确如下&#xff08;两个命令间有一个空格&…

ubuntu 下安装qemu

&#xff08;1&#xff09;安装qemu 仿真ARM需要使用qemu-system-arm&#xff0c;安装模拟器 sudo apt-get install qemu-kvm qemu-kvm-extras &#xff08;2&#xff09;下载内核镜像。以下名称叫ubuntu.iso &#xff08;3&#xff09;创建一个虚拟磁盘 sudo qemu-im…

python 怎么查看变量的数据类型

方法 type(variable_name)示例 a hello b type(a) print(b)a 10 b type(a) print(b)结果 <class str> <class int>

Valhalla项目:LW2内联类型的初步了解

我总结了最近在Valhalla LW2 项目 “ 内联类型 ”中取得的一些进展&#xff0c;这些进展最近在我的博客文章“ Valhalla LW2进度-内联类型 ”中公开了。 在这篇文章中&#xff0c;我通过针对最近发布的Valhalla Early Access Build jdk-14-valhalla 1-8&#xff08;2019/7/4&a…

QCOW2镜像格式

QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller images on filesystems that don’t support sparse files, optional AES encryption, and optional zlib compression 现在比较主流的一种虚拟化镜…

for循环简介及实例(输出九九乘法表)

for循环简介 简介 for循环是3大循环其中一种&#xff0c;相比while循环和do while循环&#xff0c;它更加灵活&#xff0c;而且完全包含了while循环的功能&#xff0c;用for语句可以解决编程中所有循环问题。 语法格式 for(语句1;表达式1;表达式2) 语句 //语句1一般用于设置…

Windows下使用net user命令管理账户

准备工作-以管理员身份运行命令提示符&#xff08;cmd&#xff09; 鼠标左键单击Windos标志或者按下键盘Windows键&#xff0c;下滑菜单&#xff0c;在Windows系统 中找到命令提示符。 2.右键&#xff0c;更多->以管理员身份运行 net user 命令用法 1.查看所有用户 net…

Java中带有NetSuite数据实体的对象关系映射(ORM)

对象关系映射&#xff08;ORM&#xff09;技术使使用关系数据源更容易&#xff0c;并且可以将逻辑业务模型与物理存储模型联系在一起。 遵循本教程&#xff0c;将与NetSuite数据的连接集成到基于Java的ORM框架Hibernate中。 您可以使用Hibernate将面向对象的域模型映射到传统的…

vmware中ubuntu虚拟机扩容

两种扩容方式&#xff1a; 重新创建一块虚拟硬盘 扩大原来的硬盘&#xff1a;如果装系统时没有进行手动分区&#xff0c;系统只有两个分区&#xff08;根分区和交换分区&#xff09;&#xff0c;这种情况我们直接扩展根分区的大小。 我们是为了解决当前用户空间不够的问题&…

pat 乙级 1021 个位数统计(C++)

题目 给定一个 k 位整数 Nd​k−1​​10​k−1​​⋯d​1​​10​1d​0(0≤d​i≤9, i0,⋯,k−1, d​k−1>0)&#xff0c;请编写程序统计每种不同的个位数字出现的次数。例如&#xff1a;给定 N100311&#xff0c;则有 2 个 0&#xff0c;3 个 1&#xff0c;和 1 个 3。 输…

该虚拟机似乎正在使用

该虚拟机似乎正在使用 点击获取所有权&#xff0c;此时虚拟机还是不能打开。 打开Vmware虚拟机虚拟磁盘文件和配置文件存放的位置 删除后缀为.lck的文件夹 然后开启此虚拟机就可以啦

PAT 乙级(Basic Level) 题解汇总(持续更新)(C++)

前言 为了准备3月份的CCF CSP认证&#xff0c;以及提升自己的编程能力和数据结构与算法基础&#xff0c;目前我坚持每天刷pat乙级题库&#xff0c;然后记录在CSDN。一则&#xff0c;希望夯实我做过的题和学到的东西&#xff1b;二则&#xff0c;希望对和我一样的小伙伴有些许帮…

反射是最重要的Java API

前几天我在想-这是最重要的Java API。 哪种SE和EE API可以使大多数Java生态系统成为可能&#xff0c;而哪些API不能刚刚被重新创建为第三方库。 正如您可能已经猜到标题一样&#xff0c;我认为它是Reflection API 。 是的&#xff0c;它不可避免地是每个项目的直接或间接的一部…

Wireshark常用过滤使用方法

过滤源ip、目的ip。 在wireshark的过滤规则框Filter中输入过滤条件。如查找目的地址为192.168.101.8的包&#xff0c;ip.dst192.168.101.8&#xff1b;查找源地址为ip.src1.1.1.1 端口过滤。 如过滤80端口&#xff0c;在Filter中输入&#xff0c;tcp.port80&#xff0c;这条规…