javascript
Spring MVC中@RequestParam和@PathVariable批注之间的区别?
Spring MVC框架是在Java世界中開發Web應用程序最流行的框架之一,它還提供了一些有用的注釋,可以從傳入的請求中提取數據并將請求映射到控制器,例如@ RequestMapping,@ RequestParam和@PathVariable。
即使將@RequestParam和@ParthVariable都用于從HTTP請求中提取值,它們之間也存在細微的差異,這使得它們從訪談和Spring認證的角度來看都是一個有用的問題。 我們將研究之間的細微差別
本文中的@RequestParam和@PathVaraible。 顧名思義,@ RequestParam用于從URL獲取請求參數,也稱為查詢參數,而@PathVariable則從URI提取值。
例如,如果傳入的檢索主題為“ Java”的書的HTTP請求是http:// localhost:8080 / shop / order / 1001 / receipts?date = 12-05-2017,則可以使用@RequestParam批注檢索查詢參數日期,您可以使用@PathVariable提取orderId即“ 1001”,如下所示:
@RequestMapping(value="/order/{orderId}/receipts", method = RequestMethod.GET)public List listUsersInvoices( @PathVariable("orderId") int order,@RequestParam(value = "date", required = false) Date dateOrNull) {...}required = false表示查詢參數可以是可選的,但URL必須具有相同的URI。
如何使用@RequestParam在Spring MVC中提取查詢參數
Spring MVC是一個豐富的框架,可以用Java開發Web應用程序和RESTful Web服務 。 它提供了幾種從傳入的HTTP請求中檢索數據的方法,例如
- 請求參數
- 路徑變量
- 表格輸入
既然您知道了Spring MVC中@RequestParam和@PathVariable之間的區別,讓我們看看如何編寫可以處理請求參數和路徑變量的Spring控制器。
使用@RequestParam獲取查詢參數
在Spring MVC應用程序中,可以使用@RequestParam批注在Controller的處理程序方法中接受查詢參數。
例如,假設您有一個Web應用程序,該應用程序返回訂單和交易的詳細信息,并且具有以下URL:
http://localhost:8080/eportal/orders?id=1001要接受上述URL中的查詢參數,可以在Spring MVC控制器中使用以下代碼:
@RequestMapping("/orders")public String showOrderDetails(@RequestParam("id") String orderId, Model model){model.addAttribute("orderId", orderId);return "orderDetails";} 如果查詢參數的名稱與處理程序的@RequestParam注釋參數中的變量名稱相同,則可以直接使用@RequestParam而不指定查詢參數的名稱,Spring會自動派生該值(請參見
Spring MVC簡介 )。
另外,這是證明這一點的代碼:
URL:http://localhost:8080/eportal/trades?tradeId=2001@RequestMapping("/trades")public String showTradeDetails(@RequestParam String tradeId,Model model){model.addAttribute("tradeId", tradeId);return "tradeDetails";}可以看到,我們剛剛使用@RequestParam注釋了方法參數tradeId,而未指定查詢參數的名稱,因為請求參數的名稱和參數名稱都相同,即“ tradeId”。
如果您有興趣了解有關@RequestParam的更多信息,建議您查看Bryan Hassen的Spring MVC 4簡介,以了解有關@RequestParam批注的更多信息。
使用@PathVariable批注從URI中提取值
您可以使用Spring MVC的@Path Varaible注釋來提取嵌入在URL本身中的任何值。 Spring將其稱為URI模板,其中@PathVariable用于從URI本身獲取一些占位符。
如果您使用過RESTful Web服務,則可能會知道REST URI包含值,例如使用ISBN號檢索書籍的REST API如下所示:
URL:http://localhost:8080/book/9783827319333現在,要從Spring MVC Controller的處理程序方法中的URI中提取ISBN號的值,可以使用@PathVariable注釋,如以下代碼所示:
@RequestMapping(value="/book/{ISBN}", method= RequestMethod.GET)public String showBookDetails(@PathVariable("ISBN") String id,Model model){model.addAttribute("ISBN", id);return "bookDetails";}與@RequestParameter批注類似,如果@RequestMapping批注中路徑變量占位符的名稱與處理程序方法的@PathVariable批注參數中的變量名相同,則也可以省略@PathVariable批注中的value屬性。(請參閱REST with Spring )。
例如,您可以重寫以上代碼,如下所示:
@RequestMapping(value="/book/{ISBN}", method= RequestMethod.GET)public String showBookDetails(@PathVariable String ISBN,Model model){model.addAttribute("ISBN", ISBN);return "bookDetails";}Spring MVC提供了一些有用的注釋來映射和提取HTTP請求中的數據,作為Spring開發人員,您應該了解這些注釋,例如@ RequestMapping,@ RequestParam和@PathVariable。
這些概念和注釋對于Spring MVC的訪問前景以及Spring認證都是非常重要的。 基于這些概念,您總是會發現幾個問題。
順便說一句,如果您正在準備Spring Web認證,還可以查看David Mayer的免費Spring Mock Questions ,以了解有關實際Spring Web Certification的問題級別和問題格式的信息。
Spring中@PathVariable和@RequestParam之間的區別
現在我們了解了兩者的區別以及如何使用兩者
@RequestParam和
Spring MVC應用程序中的@PathVariable,讓我們從訪談的角度修改它們之間的主要區別。
1)@RequestParam用于提取查詢參數,而@PathVariable用于直接從URI提取數據。
2)@RequestParam在傳統的Web應用程序上更有用,在傳統的Web應用程序中,數據主要在查詢消除中傳遞,而@PathVariable更適合RESTful Web服務,其中URL包含值,例如http:// localhost:8080 / book / 9783827319333,此處為data ISBN號是URI的一部分。
如果您想了解更多有關如何使用Spring有效開發REST應用程序的信息,建議您加入Eugen Paraschiv的
REST with Spring課程。
這是一門在線課程,它將教您為現實場景開發REST API和服務的精妙方法。
Eugen在使用Spring開發RESTful Web服務方面擁有豐富的經驗,本課程是利用他的知識的絕佳方法。
3)如果查詢參數不存在或為空,則@DefaultParam批注可以使用defaultValue屬性指定默認值,前提是必填屬性為false。
4)Spring MVC允許您在同一方法中使用多個@PathVariable批注,前提是不超過一個參數具有相同的模式。
這就是Spring MVC中@PathVariable和@RequestParam之間的區別 。 即使兩者都用于從URL提取數據,@ RequestParam仍用于檢索查詢參數,在?之后是什么? 在URL中,而@PathVariable用于從URI本身檢索值。 這個概念對于傳統的Web應用程序開發以及使用Spring開發RESTful Web Services都是非常重要的,因此您必須花一些時間來更好地理解它。
您可能想探索的其他Spring MVC文章
Bryan Hassen的Spring MVC 4簡介
Spring MVC中@RestController和@Controller之間的區別?
Spring MVC在內部如何工作?
Spring MVC中DispatcherServlet的用途是什么?
如何在Java Web應用程序中啟用Spring安全性?
Craig Walls的《春天在行動》
感謝您到目前為止閱讀本文。 如果您喜歡這篇文章,請與您的朋友和同事分享。 如有任何疑問,請給我留言。
翻譯自: https://www.javacodegeeks.com/2017/10/differences-requestparam-pathvariable-annotations-spring-mvc.html
總結
以上是生活随笔為你收集整理的Spring MVC中@RequestParam和@PathVariable批注之间的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 曾皙怎么读 曾皙的简介
- 下一篇: 女生想要偏爱什么意思 什么是女生想要的偏