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