1. 概述
為了簡化 Java 中 REST Web 服務及其客户端的開發,設計了一種標準且可移植的 JAX-RS API 實現,稱為 Jersey。
Jersey 是一個開源框架,用於開發支持 JAX-RS API 的 REST Web 服務,並作為 JAX-RS 的參考實現。
在本教程中,我們將探討如何設置 Jersey 響應體,並使用不同的媒體類型。
2. Maven 依賴
首先,需要在 <em pom.xml</em> 文件中包含以下依賴項:
<dependency>
<groupId>org.glassfish.jersey.bundles</groupId>
<artifactId>jaxrs-ri</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>3.1.1</version>
</dependency>最新版本的 JAX-RS 可在 jaxrs-ri 中找到,而 Jersey 服務器可在 jersey-server 中找到。
3. 使用 Jersey 構建響應
當然,使用 Jersey 構建響應有多種方式,我們將在下面詳細介紹。
所有示例都是 HTTP GET 請求,我們將使用 curl 命令來測試資源。
3.1. Ok 文本響應
以下端點是一個簡單的示例,展示瞭如何將純文本作為 Jersey 響應返回:
@GET
@Path("/ok")
public Response getOkResponse() {
String message = "This is a text response";
return Response
.status(Response.Status.OK)
.entity(message)
.build();
}我們可以使用 curl 命令執行 HTTP GET 請求,以驗證響應:
curl -XGET http://localhost:8080/jersey/response/ok此端點將返回響應如下:
This is a text response當媒體類型未指定時,Jersey 將默認使用 text/plain。
3.2. 錯誤響應
錯誤也可以作為 Jersey 響應返回:
@GET
@Path("/not_ok")
public Response getNOkTextResponse() {
String message = "There was an internal server error";
return Response
.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(message)
.build();
}要驗證響應,我們可以使用 curl 發送 HTTP GET 請求:
curl -XGET http://localhost:8080/jersey/response/not_ok錯誤信息將返回在響應中:
There was an internal server error3.3. 純文本響應
我們可以返回簡單的純文本響應:
@GET
@Path("/text_plain")
public Response getTextResponseTypeDefined() {
String message = "This is a plain text response";
return Response
.status(Response.Status.OK)
.entity(message)
.type(MediaType.TEXT_PLAIN)
.build();
}再次,我們可以使用 curl 命令執行 HTTP GET 請求,以驗證響應:
curl -XGET http://localhost:8080/jersey/response/text_plain響應結果如下:
This is a plain text response同樣的結果也可以通過使用 Produces 註解來實現,而不是在 Response 中使用 type() 方法。
@GET
@Path("/text_plain_annotation")
@Produces({ MediaType.TEXT_PLAIN })
public Response getTextResponseTypeAnnotated() {
String message = "This is a plain text response via annotation";
return Response
.status(Response.Status.OK)
.entity(message)
.build();
}我們可以使用 curl 進行響應驗證:
curl -XGET http://localhost:8080/jersey/response/text_plain_annotation這是響應:
This is a plain text response via annotation3.4. 使用 POJO 構建 JSON 響應
一個簡單的 Plain Old Java Object (POJO) 也可以用於構建 Jersey 響應。
我們有一個非常簡單的 Person POJO,如下所示,我們將使用它來構建響應:
public class Person {
String name;
String address;
// standard constructor
// standard getters and setters
}Person POJO 現在可以用於將 JSON 作為響應體返回:
@GET
@Path("/pojo")
public Response getPojoResponse() {
Person person = new Person("Abhinayak", "Nepal");
return Response
.status(Response.Status.OK)
.entity(person)
.build();
}這個 GET 端點的運行可以驗證——通過以下 curl 命令:
curl -XGET http://localhost:8080/jersey/response/pojoPerson POJO 將會被轉換成 JSON 格式,並作為響應返回:
{"address":"Nepal","name":"Abhinayak"}3.5. 使用簡單字符串的JSON響應
我們可以使用預格式化字符串來創建響應,並且這很容易實現。
以下端點是一個示例,展示瞭如何將JSON表示為字符串,作為Jersey響應返回:
@GET
@Path("/json")
public Response getJsonResponse() {
String message = "{\"hello\": \"This is a JSON response\"}";
return Response
.status(Response.Status.OK)
.entity(message)
.type(MediaType.APPLICATION_JSON)
.build();
}可以通過使用 curl 進行 HTTP GET 請求來驗證響應:
curl -XGET http://localhost:8080/jersey/response/json調用這個資源將返回一個 JSON:
{"hello":"This is a JSON response"}同樣適用於其他常見媒體類型,如XML或HTML。我們只需要通知Jersey它是一個XML或HTML,通過使用MediaType.TEXT_XML或MediaType.TEXT_HTML,Jersey 就會處理剩下的工作。
4. 結論
在本文中,我們構建了多種媒體類型的Jersey (JAX-RS) 響應。