簡單幾步使用Dropwizard實現一個RESTful微服務

banq發表於2016-12-06
Dropwizard是一個輕量實現Java微服務的框架,官方案例可能比較複雜,這裡展示分分鐘簡單幾步實現一個RESTful微服務。

整個應用只有兩個Java檔案和pom.xml,Java檔案分成帶有main方法的應用主檔案和資源如路由等,主應用檔案程式碼如下:

public class DropwizardExampleApplication extends Application<Configuration> {  
  public static void main(String[] args) throws Exception {
    new DropwizardExampleApplication().run(args);
  }

  @Override
  public void run(Configuration configuration, Environment environment) {
    environment.jersey().register(new Resource());
  }
}
<p class="indent">

正如你看到,所有需要做的就是在main方法中呼叫run,而其主要是註冊資源。執行Dropwizard透過其jar包:
mvn package && java -jar target/dropwizard-example-1.0-SNAPSHOT.jar server

資源也很簡單,比如下面是GET路由:

@Path("/")
public class Resource {  
  @GET
  @Path("/hello")
  public String hello() {
    return "Hello";
  }
}
<p class="indent">


測試訪問:
% curl localhost:8080/hello
Hello

只要使用元註解@Path,那麼Dropwizard (Jersey)會做剩餘的事情,如果你要帶引數查詢,元註解在方法引數中:

@GET
  @Path("/query")
  public String query(@QueryParam("message") String message) {
    return "You passed " + message;
  }
<p class="indent">


測試輸出:
% curl 'localhost:8080/query?message=hello'
You passed hello

表單POST引數如下:

@POST
  @Path("/postparam")
  public String postParam(@FormParam("message") String message) {
    return "You posted " + message;
  }
<p class="indent">


測試結果:
% curl -X POST -d 'message=hello' localhost:8080/postparam
You posted hello

對於通常的POST內容,你甚至不需要元註解:

  @POST
  @Path("/postbody")
  public String postBody(String message) {
    return "You posted " + message;
  }
<p class="indent">


% curl -X POST -d 'hello' localhost:8080/postbody
You posted hello

整個專案原始碼見: Github

Dropwizard Can Be Simple

相關文章