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
    @JsonProperty
    private 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;
    }

    @GET
    public 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);
    }

    @Override
    public void run(TimezoneConfiguration config, Environment environment) {
        String defaultTimezone = config.getDefaultTimezone();
        TimeResource timeResource = new TimeResource(defaultTimezone);
        environment.addResource(timeResource);
    }

    @Override
    public 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值