1. 簡介
Jersey 是一個流行的 Java 框架,用於創建 RESTful Web 服務。
在本教程中,我們將探索如何通過一個簡單的 Jersey 項目讀取不同請求參數類型。
2. 項目設置
使用 Maven 考古包,我們將能夠為我們的文章生成一個可運行的項目:mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example
-DarchetypeVersion=2.28
生成的 Jersey 項目將運行在 Grizzly 容器之上。
現在,默認情況下,我們的應用程序端點的 URL 是 http://localhost:8080/myapp。
讓我們添加一個 items 資源,我們將用於我們的實驗:
@Path("items")
public class ItemsController {
// 我們的端點在這裏定義
}
請注意,Jersey 與 Spring 控制器也很好地協同工作。
3. 註解參數類型
因此,在我們實際讀取請求參數之前,讓我們先澄清一些規則。允許的參數類型有:
- 基本類型,如float和char
- 具有單個String參數構造函數的類型
-
具有 either 一個 fromString 或 valueOf 靜態方法;對於這些類型,單個 String 參數是強制性的
- 集合 – 如List、Set和SortedSet,這些集合的類型是上述類型
此外,我們可以註冊 ParamConverterProvider JAX-RS 擴展 SPI。返回值必須是一個ParamConverter實例,能夠從String類型進行轉換。
4. Cookies
我們可以使用 @CookieParam 註解在我們的 Jersey 方法中解析 Cookie 值:
@GET
public String jsessionid(@CookieParam("JSESSIONId") String jsessionId) {
return "Cookie parameter value is [" + jsessionId+ "]";
}
> curl --cookie "JSESSIONID=5BDA743FEBD1BAEFED12ECE124330923" http://localhost:8080/myapp/items
Cookie parameter value is [5BDA743FEBD1BAEFED12ECE124330923]
5. 標題
或者,我們可以使用 HTTP 頭部 與 @HeaderParam 註解進行解析:
@GET
public String contentType(@HeaderParam("Content-Type") String contentType) {
return "Header parameter value is [" + contentType+ "]";
}
讓我們再次測試:
> curl --header "Content-Type: text/html" http://localhost:8080/myapp/items
Header parameter value is [text/html]
6. 路徑參數
尤其是在 RESTful API 中,通常會包含在路徑中。
我們可以使用 @PathParam 來提取路徑元素:
@GET
@Path("/{id}")
public String itemId(@PathParam("id") Integer id) {
return "路徑參數值是 [" + id + "]";
}
讓我們發送另一個 curl 命令,值為 3:
> curl http://localhost:8080/myapp/items/3
路徑參數值是 [3]
7. 查詢參數
我們通常在 RESTful API 中使用查詢參數來提供可選信息。
要讀取這些值,我們可以使用 @QueryParam 註解:
@GET
public String itemName(@QueryParam("name") String name) {
return "Query parameter value is [" + name + "]";
}
因此,我們可以像之前一樣使用 curl 測試:
> curl http://localhost:8080/myapp/items?name=Toaster
Query parameter value is [Toaster]