Jersey 2.x 探索新建的工程
如果用 Jersey maven archetype 成功建立了這個專案,那麼在你當前的路徑下就已經建立了一個名為simple-service
專案。它包含了一個標準的Maven專案結構:
說明 | 檔案目錄 |
---|---|
在專案根目錄下的的專案構建和管理配置描述檔案 | pom.xml |
專案原始碼檔案 | src/main/java |
專案測試原始碼 | src/test/java |
在原文路徑下的com.example
包中有兩個 class 檔案,這個 Main 類主要是負責啟動 Grizzly 容器,同時也為這個容器配置和部署 JAX-RS 應用。
在同一個包內的另外一個類 MyResource 類是 JAX-RS 的一個實現的原始碼,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package
com.example;
import
javax.ws.rs.GET;
import
javax.ws.rs.Path;
import
javax.ws.rs.Produces;
import
javax.ws.rs.core.MediaType;
/**
* Root resource (exposed at "myresource" path)
*/
@Path
(
"myresource"
)
public
class
MyResource {
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces
(MediaType.TEXT_PLAIN)
public
String getIt() {
return
"Got it!"
;
}
}
|
一個 JAX-RS 資源是一個可以處理綁定了資源的URI的HTTP請求的帶有註解的POJO,詳細內容可以看第三章。在我們的例子中,單一的資源暴露了一個公開的方法,能夠處理HTTP GET請求,繫結在/myresource
URI路徑下,可以產生媒體型別為“text/plain”的響應訊息。在這個示例中,資源返回相同的“Got it!”應對所有客戶端的要求。
在src/test/java
目錄下的 MyResourceTest 類是對 MyResource 的單元測試,他們具有相同的包 com.example 中。但是這個單元測試類被放置到 maven 工程中的測試原始碼目錄下
src/test/java(為了增加程式碼的簡潔性,一些程式碼的註釋和 JUnit 的匯入類被省略了)。
package
com.example;
import
javax.ws.rs.client.Client;
import
javax.ws.rs.client.ClientBuilder;
import
javax.ws.rs.client.WebTarget;
import
org.glassfish.grizzly.http.server.HttpServer;
...
public
class
MyResourceTest {
private
HttpServer server;
private
WebTarget target;
@Before
public
void
setUp()
throws
Exception {
server = Main.startServer();
Client c = ClientBuilder.newClient();
target = c.target(Main.BASE_URI);
}
@After
public
void
tearDown()
throws
Exception {
server.stop();
}
/**
* Test to see that the message "Got it!" is sent in the response.
*/
@Test
public
void
testGetIt() {
String responseMsg = target.path(
"myresource"
).request().get(String.
class
);
assertEquals(
"Got it!"
, responseMsg);
}
}
|
在這個單元測試中靜態方法 Main.startServer()
首先將 Grizzly 容器啟動,然後伺服器應用部署到測試中的 setUp()
方法。接下來,一個JAX-RS 客戶端元件在相同的測試方法建立。 先是一個新的JAX-RS客戶端例項生成,接著JAX-RS web target 部件指向我們部署的應用程式上下文的 root:http://localhost:8080/myapp/
( Main.BASE_URI
的常量值)儲存在單元測試類目標區。這個區被用於實際的單元測試方法(testgetit()
)。
在 testgetit() 方法中,JAX-RS 客戶端 API 是用來連線併發送 HTTP GET 請求的 MyResource JAX-RS 資源類偵聽在/myresource
的URI。同樣作為 JAX-RS API 方法呼叫鏈的一部分,迴應以Java字串型別被讀到。在測試方法的第二行,響應的內容(從伺服器返回的字串)跟測試斷言預期短語比較。要了解更多有關使用 JAX-RS 客戶端API,請參閱第5章客戶端API。