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) {
}
这使我们还有三件事要做:
- 从客户端处理给定的时区
- 如果没有给出默认时区
- 用时区格式化当前日期和时间
@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