Dropwizard:用Java轻轻的写一个RESTful Service

Dropwizard与Guice集成项目实战:0.6.2版本 本文还有配套的精品资源,点击获取 简介:该开源项目将Dropwizard和Guice两个框架的版本0.6.2结合,为开发者提供高性能Java web服务构建和灵活的组件管理。Dropwizard提供基础设施简化功能,而Guice通过依赖注入提高模块化和可维护性。该项目主要针对Dropwizard应用中集成Guice以实现更细致的组件管理和配置。 1. Dropwi... 阅读详情

 1.关于Dropwizard的一些闲扯

  在我的上一篇博客《 Embedded Server:像写main函数一样写Web Server》中,提到了使用Jetty Embedded Server进行Java Web Server的开发比传统的Web Container的方式进行开发的优势。如果直接使用Jetty提供的API进行Web Server的开发,特别是RESTful service的开发,难免看起来还是简单粗暴了一些。

  在很多年前,有很多人就说“Java is Dead”。

  然后期望着更多的程序员逃离java世界,奔向看起来很美好的Ruby, Python等等。我自己而言,我不关心java是不是已经死在沙滩上了,更多的是想,新语言引入的新的技术,或者一些新的思潮,能够折射出我们Java语言或者开发环境中的哪些不足。

  有很多用Ruby on Rails的人,在对ruby知之甚少的情况下,就开始吭哧吭哧的写Server了。Rails提供了开发一个Server的完整技术栈,可以很方便的进行开发,后来又有很多人提供了很多RoR的的插件。

  Dropwizard也是这么一个东西,提供了使用Java进行RESTful开发的所需要的最小的技术集合,使用了最轻量级的library。如之前博客里提到的Jetty,还有Jersey,Jackson等等。在Dropwizard官网上对其自身的介绍还是比较客气的,不过看了Dropwizard在github上(https://github.com/dropwizard/dropwizard)的介绍还是更来的实际些:

 A damn simple library for building production-ready RESTful web services.

  一个damn是那么的霸气侧漏。也希望有一天我开发的某个library或者框架也能用上这样的词语:RNM,TTMD等等。

2. 启动Dropwizard编译生成的Server

  在真正介绍如何使用Dropwizard之前,我想先让大家看看如何运行已经写好的Server的:

  java -jar dropwizard-demo-standalone.jar server hello.yaml

  这样做的原因,是让大家知道这个东西用起来很简单,这让我自己更迫不及待的想要用它。

3. 使用Dropwizard写一个RESTful Service

   用Dropwizard写一个RESTful Service至少需要这么几个部分:一是Configuration,二是Service,然后是Resource。因为Dropwizard中已经包括了最常用和最好用的几个开源库,这样编写一个Service会方便和快捷很多。Configuration主要是作为Serivce本身的配置,通过Service可以访问对应的Resource。下面就看一个简单的例子:

  Configuration: 

  Configuration用于从配置文件中读取信息,比如从前面的hello.yaml中读取。Dropwizard中默认的是使用yaml,当你提供的配置文件的后缀名不是.yml或者.yaml时,将会讲你的配置文件看做JSON格式。

   hello.yaml

   template: Hello, %s!
   defaultName: Stranger

   在hello.yaml中提供了两个属性,template和defaultName。对应的是Java中的HelloConfiguration:

public class HelloConfiguration extends Configuration {
@NotEmpty
@JsonProperty
        private String template;


    @NotEmpty
    @JsonProperty
    private String defaultName = "Stranger";

    public String getDefaultName() {
        return defaultName;
    }

    public String getTemplate() {
        return template;
    }
}

  Service:

public class HelloService extends Service<HelloConfiguration> {
public static void main(String[] args) throws Exception {
        new HelloService().run(args);
    }

    @Override
    public void initialize(Bootstrap<HelloConfiguration> bootstrap) {
        bootstrap.setName("hello");
    }

    @Override
    public void run(HelloConfiguration configuration, Environment environment) throws Exception {
        final String template = configuration.getTemplate();
        final String defaultName = configuration.getDefaultName();
        environment.addResource(new HelloResource(template, defaultName));
    }
} 

  在service中比较关键的几个东西包括HelloConfiguration,这个就是我们先前从hello.yaml中解析出的对象。还有就是Environment,Dropwizard提供了很多组件,包括像Resource, Filter, HealthCheck等等,这些都被包括在了environment中。这里我们添加了一个HelloResource。

  Resource:

@Path("hello")
@Produces(MediaType.APPLICATION_JSON)
public class HelloResource {
    private final String template;
    private final String defaultName;
    private final AtomicLong counter;

    public HelloResource(String template, String defaultName) {
        this.template = template;
        this.defaultName = defaultName;
        this.counter = new AtomicLong();
    }

    @GET
    public Saying sayHello(@QueryParam("name") Optional<String> name) {
        return new Saying(counter.incrementAndGet(),
                String.format(template, name.or(defaultName)));
    }
}

public class Saying {
    private final long id;
    private final String content;

    public Saying(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

3. 验证Service

    在服务被启动起来以后,我们可以验证:

    curl http://localhost:8080/?hello=gogo

    返回:

    {"id":1,"content":"Hello, kiwi!"}

4. 更多

  博客写到这里,我不禁有点儿脸红,博客中用到的例子其实都出自Dropwizard的官网,希望大家不要嫌弃我。这里把例子几乎完整的列出来的原因是在于,想展示给大家使用Dropwizard可以很方便的开发一个RESTful Service。特别是对于小型的Service,使用Dropwizard进行开发就显得极其方便。也许有人要说,大型的Service怎么办呢?我的系统或者业务本身就是很复杂怎么办呢?是不是就不能用Embedded Server了?是不是就不能用Dropwizard提供的生态系统了?其实不然,当然这里面有更多的巧思。另外,Dropwizard中还有很多有意思而且好用的组件

  如果我还不算太懒的话 ,后续的博客应该会提到。

代码详解——Transformer 对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。当 Decoder 的输入矩阵和 Mask 矩阵输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。然后判断是否传入的mask, 如果有mask (mask参数值不为None),则把mask为0的位置,将对应位置的attn的值设为无穷小的负数。可以发现得到的输出和输入的K,Q,V的大小相同。 阅读详情

相关推荐

现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

建立直线一级倒立摆系统的动力学模型,推导该系统的运动方程,求出直线一级倒立摆系统传递函数模型及空间状态方程模型。接着描述了PID控制系统设计原理及PID控制器各校正环节的作用,简要叙述了参数的整定方法。设计了直线一级倒立摆摆杆摆角及小车位置常规单回路控制器,通过Simulink仿真知道常规单回路控制器能控制摆杆摆角,不能控制小车位置。于是设计出了直线一级倒立摆双闭环控制器及基于倒立摆系统的状态空间方程控制器,利用软件进行仿真,仿真结果表明,常规双闭环控制方案和基于状态空间方程加控制方案均能对摆杆摆角及小车位

mengshenglo的博客 4万+

探秘Dropwizard:一款高效能的Java Web应用框架

Dropwizard是一款高性能、面向生产环境的Java Web服务开发框架。它将许多成熟的Java库集成在了一起,让你能够快速构建健壮且可靠的RESTful服务。如果你是Java开发者并寻找一个能够简化开发流程的工具,那么Dropwizard绝对值得你的关注。 ## 项目简介 Dropwizard由Yammer(现为Microsoft的一部分)于2012年创建,它包括了许多核心组件,如Jet...

gitblog_00034的博客 953

PLSQL 14.0.6 下载使用教程

众所周知,PLSQL 只是一个oracle第三方开发测试工具,它依赖oracle 客户端搭配使用,但是oracle 客户端有2G,相当庞大,不建议安装。所以我们如果下载安装好PLSQL,再下载好轻量级的支持远程链接的oracle客户端,这样搭配使用可以的话就最好了,答案是可以的。 第一步: PLSQL 下载与安装 PLSQL 14.0.6 下载地址 : https://www.allroundautomations.com/registered-plsqldev/ 下载下来,除了安装路径更改一下,

qq976511508的博客 2134

Dropwizard框架新手学习教程(详细版)

(留坑待更。。。。。) 一.Dropwizard简介: 1. Dropwizard 是一个开源的Java 框架; 2. 用于开发易于运维,高性能的RESTful网络服务; 3. 它由Yammer开发; 4. 它增强了基于JVM 的后端服务,集合了来自Java 生态系统中的稳定和成熟的程序库,组成 了简单,轻量级的程序包,使得用户可以专注于把事情做好; 5. Dropwizard

zwbHUST的博客 2706

ggml_cgraph 详解

是 GGML 库的(Computation Graph)结构,它是深度学习框架的核心,用于表示、优化和执行神经网络的计算过程。

zhouzwd87的专栏 1203

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3361

Dropwizard入门指南:从零开始搭建应用

Dropwizard是一款基于Java的轻量级Web应用程序框架,它集成了多种成熟的库,如Jetty(HTTP服务器),Jackson(JSON处理),Jersey(JAX-RS实现)以及Metrics(监控工具),旨在简化RESTful服务的开发、测试和部署流程。对于初学者而言,Dropwizard提供了一个高效且条理清晰的方式来构建高性能的服务端应用。 ## 1. 项目基础介绍与编程语言 ...

gitblog_01230的博客 910

AI赋能运筹优化:从参数生成到智能求解的工程实践

运筹学通过线性规划、整数规划等数学模型,为供应链、物流、生产排程等复杂决策问题寻找最优解,其核心价值在于提升资源利用效率与决策科学性。传统方法依赖精确的输入参数与专家经验,面临数据不准、建模门槛高、求解调优难等挑战。人工智能技术的引入,正从原理层面重塑这一流程:通过深度学习模型生成更贴合现实的动态参数(如需求分布、行驶时间),利用自然语言处理降低建模门槛,并借助强化学习对求解器进行智能参数调优。这种AI与运筹学的融合,在工程实践中显著提升了优化系统的自适应能力与求解效率,使其在应对实时交通、柔性生产调度等动

weixin_26913055的博客 595

dropwizard框架官网知识介绍

生产就绪,开箱即用(Production-ready, out of the box.) 准备开始 入门将指导完成创建一个简单的Dropwizard项目:Hello World,在这过程中,我们将解释各种各样的底层库和作用以及Dropwizard的重要概念,并且建议一些组织技巧来帮助你的项目成长(或者你也可以直接跳到有趣的部分。) 概述 Dropwizard介于...

weixin_42211693的博客 2079

raw (R/G, B/G) 色度域从白点筛选到 mired 直方图的完整构建流程

raw 域用draw​δraw​筛出白点后,。,与 CIE uv 域流程逐步对应。

大熊 38

移位寄存器——用Verilog实现串入串出、串并和并串转换并进行Modelsim仿真

用Verilog实现串并转换 首先我们先要了并串和串并转换的原理 并串转换:先将八位数据暂存于一个八位寄存器器中,然后左移输出到一位输出端口,这里可以通过一个“移位”来实现,相当于实现了移位寄存器的功能。 串并转换:新输入的位值成为原来数据的最低位,将原来数据的最高位舍去,这里可以通过一个简单的“连接符”来实现。 我们这里采用两种方式来进行串并转换 一:lsb优先 Least Significant Bit,最低比特,最低位优先 二:msb优先 Most Significant Bit,最高比特,

H19981118的博客 2万+

Dropwizard-metric的使用

介绍dropwizard-metric的使用方式和一些自己的理解

看了就会 1820

AI学习指南RAG篇(19)-API调用与集成

通过上述API调用示例,您可以方便地将RAGFlow与其他系统集成,实现数据集管理、文档处理、会话管理等功能。希望本文的介绍能帮助您更好地理解和使用RAGFlow的API。

俞兆鹏的博客 2545

Heroku:快速部署Dropwizard开发的RESTful Service

上一篇博客《Dropwizard:用Java轻轻的写一个RESTful Service》中讲到了使用Dropwizard可以快速的开发出一个RESTful service,同时因为Dropwizard使用的是Jetty Embedded Container,就可以不再需要繁琐的去安装相应的container,以及其他的好处(参考《Embedded Server:像写main函数一样写Web Server》)。唯一需要的东西,只是java的运行时环境。为了说明这样带来的好处,这篇博客将会采用大家耳熟能详的一个

kiwi_coder 6192

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Dropwizard框架入门

最近项目用到了Dropwizard框架,个人感觉还不错,那么这里就从他们官网入手,然后加上自己的实现步骤让大家初步了解这个框架。 官网对DW(Dropwizard)的定义是跨越了一个库和框架之间的界限。他的目标是提供一个生产就绪的web应用程序所需的一切性能可靠的实现。那么这句话可能有些绕,我个人理解就是他能免去我们部署web应用的很多步骤。由于这个功能被提取到可以重复使用的库中,我们的应用程序

MOON 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Dropwizard 开发环境搭建

Dropwizard 开发环境搭建

Mointor 999

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Dropwizard 框架概述

原文地址. Dropwizard 跨越了 作为库和框架 之间的界限.(Dropwizard straddles the line between being a library and a framework.) 它的目标是为生产就绪的(production-ready) web 应用 提供高性能, 可靠的实现. 因为此功能被提取到一个可重用的库中, 所以你的应用程序能够 保持精简和专注, 减少了上市时间(time-to-market)和维护负担. 1 通过 Jetty 使用 HTTP 因为一个 web 应

四年时光 753

Dropwizard入门指南:构建高性能Java Web应用

Dropwizard是一个介于库和框架之间的Java Web应用开发工具集,它整合了多个高性能组件,为开发者提供了一套完整的生产级Web应用解决方案。与传统的Java EE应用服务器不同,Dropwizard采用嵌入式设计,将应用打包为一个可独立运行的JAR文件,极大简化了部署和运维工作。 ## 核心组件解析 ### 1. Jetty HTTP服务器 Dropwizard内置了经过高度优化的...

gitblog_00503的博客 557

Dropwizard 框架教程

[Dropwizard](https://github.com/dropwizard/dropwizard) 是一个用于构建高效、稳定的 RESTful Web 服务的 Java 框架。它整合了一系列成熟的Java生态库,如 Jersey(JAX-RS 实现)、Jackson、Jetty 和 Metrics 等,旨在简化开发过程,帮助开发者更专注于实现业务逻辑,而不是基础架构。 Dropwiza...

gitblog_00813的博客 565

dropwizard微服务实践

一 Dropwizard是什么? Dropwizard是一个跨越了库和框架的界限,他的目标是提供一个生产就绪的web应用程序所需的一切性能可靠的实现。 (一)它主要包含以下组件: 1、Jetty for HTTP 将Jetty的http库嵌入到项目中,不需要将我们的服务提交到复杂的服务器上。只需要一个main方法就可以启动服务。 2、Jersey for REST 使用Jersey来支

zhongyuan_1990的专栏 957

Dropwizard官方教程(一) 入门

转载:https://www.jianshu.com/p/3bb308c9bbcb 入门 本文将指导您完成一个简单的Dropwizard的Hello World项目。在此过程中,我们将解释各种底层库及其作用,以及Dropwizard中的重要概念,并建议一些组织技术来帮助您的项目能持续健康地增长。 概览 Dropwizard跨越了作为lib库和框架之间的界限。其目标是为生产就绪的Web应用程...

Flyer的后花园 3432

52周技术系列之Dropwizard:构建Java微服务的利器

Dropwizard是一个开源的Java框架,最初由Yammer公司开发,用于构建高性能、运维友好的RESTful后端服务。它将多个优秀的Java库整合在一起,让开发者能够快速搭建生产就绪的微服务。 ## 核心组件 Dropwizard框架由以下几个核心组件构成: 1. **嵌入式Jetty服务器**:应用被打包为可执行的JAR文件而非WAR文件,内置Jetty容器,无需外部Servlet容...

gitblog_00334的博客 528

如何快速构建RESTful服务:Dropwizard核心之Application与Configuration实战指南

Dropwizard是一个用于构建生产级RESTful Web服务的简单库,它将成熟稳定的Java库整合在一起,帮助开发者快速搭建高性能的Web应用。本文将深入解析Dropwizard的两大核心组件:Application与Configuration,带你掌握构建Dropwizard应用的基础技能。 ## 🧙‍♂️ Dropwizard简介 Dropwizard就像一位技术魔法师,将Jett

gitblog_00738的博客 738

Dropwizard核心揭秘:构建高性能Java REST服务的终极指南

Dropwizard是一个专为构建生产级RESTful Web服务设计的简单而强大的Java库。它将成熟稳定的Java生态系统组件(如Jetty、Jersey、Jackson和Metrics)整合在一起,提供了开箱即用的功能,让开发者能够专注于业务逻辑而非基础设施配置。本文将深入探讨Dropwizard的核心特性、架构设计以及如何快速上手构建高性能API服务。 ## 🚀 为什么选择Dropwi

gitblog_01008的博客 683

REST微服务架构之Dropwizard

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33874713的博客 322

dropwizard框架学习

Dropwizard: Overview: Dropwizard straddles the line between being a library and a framework.  跨越了库和框架之间的界限。 Jetty for Http: 由于不能成为一个没有HTTP的web应用程序,Dropwizard使用Jetty HTTP库将一个HTTP服务器嵌入到项目

wyplj2015的博客 818
上一篇: Embedded Server:像写main函数一样写Web Server
下一篇: Heroku:快速部署Dropwizard开发的RESTful Service
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值