Java开发者需要一个快速 轻量无痛苦的创建一个为产品环境准备的RESTful + JSON +HTTP的web 服务,Dropwizard只需通过简单配置就能让你的类提供RESTful服务,如今已经超越SpringMVC成为轻量REST框架首选。
下面,展示如何使用Dropwizard开发一个轻量的RESTful服务。首先,配置Maven依赖:
<dependency>
<groupId>com.yammer.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>0.6.2</version>
</dependency>
案例:让我们返回一个给定的时区的当前日期和时间的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; }
}
@Path("/time")
@Produces(MediaType.APPLICATION_JSON)
public class TimeResource {
}
在这个类型中,我们进行如下处理:处理来自客户端指定的时区,如果没有指定使用缺省的时区体会,用当前时区格式化日期和时间。
增加一个方法处理GET方式,从/time获得查询参数timezone的值:
@GET
public Time getTime(@QueryParam("timezone") String timezone) {
}
完整代码如:
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);
}
}
端点TimeService代码如下:
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 -cp libraries/* name.christianson.mike.TimeService server time-service.yml
通过浏览器浏览:
http://localhost:8080/time?timezone=MST