Java EE 8 MVC:使用查询参数
在上一篇有關新Java EE MVC框架的文章中,我們詳細介紹了Controllers 。 在本篇和以下文章中,我們將看到如何在MVC控制器中訪問各種類型的請求數據。
Java EE MVC大量使用了JAX-RS,我們將在本篇和下一篇文章中看到的大多數內容都是JAX-RS的功能。 因此,如果您熟悉JAX-RS,那么您可能不會在本文中學到很多新知識。
查詢參數
這篇文章著重于查詢參數。 如果閱讀我的Java EE MVC入門文章,您可能已經知道@QueryParam批注。 @QueryParam最常見的用例是將查詢參數映射到控制器方法參數。
例如:
@Controller @Path("query-params") public class QueryParamsController {@GETpublic String queryParams(@QueryParam("name") String name) {...} }如果我們現在將HTTP GET請求發送到:
/query-params?name=john字符串“ john ”將作為name參數傳遞給方法queryParams() 。
類型轉換
使用@QueryParam可以將查詢參數自動轉換為各種類型。
例如:
public enum Role {admin, reporter, accountant }@Controller @Path("query-params") public class QueryParamsController {@GETpublic String queryParams(@QueryParam("id") long id,@QueryParam("name") String name,@QueryParam("role") Role role) {...} }我們現在可以發送這樣的請求:
/query-params?id=42&name=john&role=admin如果目標類型與以下規則之一匹配,則查詢參數可以自動轉換為類型:
- 它是原始類型
- 該類型具有一個接受單個String參數的構造函數
- 該類型具有一個名為valueOf()或fromString()的靜態工廠方法,帶有一個String參數
- 類型是List<T> , Set<T> ; 或SortedSet<T> ,其中T匹配先前的規則之一
在前面的示例中,查詢參數id自動轉換為long 。 如果缺少id參數或無法轉換為long ,則將引發異常。 也可以使用Long代替long 。 在這種情況下,如果缺少id參數,則會將null傳遞給controller方法。
枚舉默認情況下具有valueOf()方法。 因此,查詢參數role可以自動轉換為相應的枚舉值。
在字段和方法上使用
@QueryParam不限于方法參數。 也可以將查詢參數映射到字段或方法,如以下示例所示:
@Controller @Path("query-params-fields") public class QueryParamsFieldController {@QueryParam("id")private Long id;@QueryParam("role")private Role role;private String name;@QueryParam("name")public void setName(String name) {this.name = name;}@GETpublic String queryParams() {// use id, role and name} }如果我們現在將HTTP GET請求發送到:
/query-params-fields?name=john&id=42&role=reporter在調用queryParams()之前,將參數設置為id , role和name字段(通過setName() )。
不要忘記為每個請求都創建了該類的新實例,因此擁有包含請求信息的字段是安全的。
快速總結
@QueryParam批注可用于獲取查詢參數。 @QueryParam可以用于字段,方法和方法參數。 只要目標類型是基本類型,包含String構造函數或包含valueOf()或fromString()工廠方法,查詢參數就可以自動轉換為各種類型。
- 您可以在GitHub上找到所有顯示示例的源代碼。
翻譯自: https://www.javacodegeeks.com/2016/01/java-ee-8-mvc-working-query-parameters.html
總結
以上是生活随笔為你收集整理的Java EE 8 MVC:使用查询参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现货白银可以操作欧洲盘和美洲盘吗?
- 下一篇: 如何做现货黄金交易?