spring_Spring MVC中@RequestParam和@PathVariable批注之间的区别?

spring

spring

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)如果查询参数不存在或为空,则@RequestParam批注可以使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值