REST with Java (JAX-RS) using Jersey2.X(web.xml & class)

在網路上查到的資料都稍舊了些,所以自己來寫一篇囉!

定義:Jersey client API 是一組非常 High level API,可以讓我們很輕鬆的開發 Restful web services client。

以下只寫到出現 Hello World 即停止。程式結構如下圖:

一開始同樣開一個 Dynamic Web Project,並轉換成 Maven Project,在 pom.xml 中加入以下資訊:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.20</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.20</version>
</dependency>

Version 2.27 經測試會造成 Tomcat 8.5 啟動出現錯誤訊息、原因不明、欲使用最新版的參考一下。

Jersey 2.X 後可以不用 web.xml 來控制程式流向,程式碼如下:

  • MyApplication
package com.test.jersey;

import javax.ws.rs.ApplicationPath;

import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("api")  //Web 進入點

public class MyApplication extends ResourceConfig {

    public MyApplication() {
        //指定 Package
        packages("com.test.jersey");
    }
}

  • HelloJersey
package com.test.jersey;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/hello") //提供服務的 URL
public class HelloJersey {

    @GET //對應的要求方法:可以是 GET, POST, PUT, DELETE

    public String sayHello() {
        return "Hello, Jersey";
    }

}
  • 執行結果:

以下為使用 web.xml 的寫法:將 MyApplication.java 去除(不寫)、HelloJersey.java 內容不變、 web.xml 增加以下內容:

  • web.xml
  <servlet>
    <description>JAX-RS Tools Generated</description>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

    <!-- Servlet 初始化參數 -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <!-- 指定 Package -->
        <param-value>com.test.jersey</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>    
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <!-- Web 進入點 -->
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
  • 執行結果:

特別注意執行結果中、Web 的進入點是不同的、由此可證明2個不同寫法確實都是可以執行的。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *