Spring 3.2引入了对处理“矩阵变量”的支持,并且可能像大多数开发人员一样,我从未听说过它们。 因此,经过一番研究,我对这个博客的了解是什么,以及您可以如何使用它们。 和往常一样,如果我错了,请随时纠正我。
当我第一次阅读它们时,会想到很多问题,例如:
- 这些是什么?
- 为什么要使用它们?
- 为什么在Spring的家伙们认为他们很重要?
- 为什么现在?
这些是什么?
Spring文档中介绍了Spring 3.2新增的矩阵变量。 这是指RFC3986和1996年的Tim Berners-Lee的文档 。如果您使用Google Matrix URI,则不会得到太多帮助,而在您我之间,RFC总是使用枯燥的纯文本以一种非常无聊的方式编写格式,这可能会阻止人们阅读它们。 RFC3986的相关部分是:
产生URI的应用程序通常使用段中允许的保留字符来分隔特定于方案或特定于解除引用处理程序的子组件。 例如,分号(“;”)和等号(“ =”)保留字符通常用于定界适用于该段的参数和参数值。 逗号(“,”)保留字符通常用于类似目的。 例如,一个URI生产者可能使用诸如“ name; v = 1.1”之类的段来表示对“名称”的1.1版的引用,而另一家URI生产者可能使用诸如“ name,1.1”之类的段来表示相同。 参数类型可以通过特定于方案的语义定义,但是在大多数情况下,参数的语法特定于URI的取消引用算法的实现。
由此,您可能会发现矩阵URI是将参数指定为URI一部分的一种方式。 现在,您可能会说,我已经可以使用以下形式的请求参数来做到这一点:
http://localhost:8080/myappname/mypath?var1=hello&var2=world
就矩阵URI而言,我猜这可以转换为:
http://localhost:8080/myappname/mypath;var1=hello;var2=world
那么,他们还能给你什么呢? 让我们退后一会儿,提出一个场景,我将在下一个博客中编写一些代码。 在这种情况下,我正在编写一个股票/股票投资组合应用程序,此应用程序会收到一个HTTP GET调用,该调用作为附加的全部股票名称和价格。
http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70;AZN=236.0;SBRY=375.50
在此示例中,我有spring_3_2/matrixvars
应用程序,该应用程序指定了三个股票名称“ BT.A”,“ AZN”和“ SBRY”及其关联的价格。 这涵盖了与上述相同的场景; 但是,库存数据不仅随价格一起提供,还包括各种可选的详细信息:价格变化,价格变化百分比等。 使用逗号“,”和分号,我们可以将此附加信息添加到URI中:
http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07
上面的URI展示了矩阵URI使您能够将数据集合附加到URI的任何部分。 说集合时,您还会想到可以附加的数据是可变的,并且可以出现在URI中的任何位置。 例如,如果完成上述URI所需的数据不完整,我可以轻松编写:
http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,,+3.91;AZN=236.00,+103.00;SBRY=375.50
…将其提交给我的申请仍然有效。
接下来要说明的是矩阵变量具有层次依赖性。 在上面的示例中,库存信息(例如:BT.A = 276.70,+ 3.91)与
库存 URI路径的一部分。 这意味着我可以向URI的不同部分添加不同的矩阵变量:
http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,,+3.91;AZN=236.00,+103.00;SBRY=375.50/account;name=roger;number=105;location=stoke-on-trent,uk
在上面的示例中,我仍然获得了与URI的股票部分有关的股票价格信息,但是现在我还添加了一些帐户信息,通知我的应用程序:来自英国的更老的帐户(105号帐户)拥有BT。 A,AZN和SBRY在他的投资组合中。 显然,帐户信息与我的URI的account
部分有关。
为什么要使用它们?
从上一节中,我认为您应该能够猜出答案。 正如Spring的伙计们所说的那样,矩阵URI或矩阵变量为您提供了一种新的方式来处理可变数量的URI参数,并能够处理使用HTTP GET传递给应用程序的数据量日益增加的复杂性。
为什么Spring家伙认为他们很重要?
现在,我无法代表Spring的家伙,但是像您一样,我可以猜测他们的想法,因此对于Spring的Guy,如果我在这里错了,请告诉我。 我想他们可能会回答这样的问题:矩阵变量增加了Spring @RequestMapping
方法可以处理的URI的灵活性,从而满足了对越来越复杂和高度交互的Web应用程序的需求。 他们还巧妙地填补了Spring军械库的功能差距,使Spring与已经支持该技术的JAX-RS保持一致。
为什么现在
最后一个问题必须是“ 为什么现在”? 。 毕竟,这个想法可以追溯到1996年,那么什么使其与当今世界相关? 我想这个问题的答案在于要求网络应用程序做什么。 高度互动的页面非常流行,这些页面使用AJAX和JSON进行更新而无需全屏刷新。 JSON提供了对信息请求进行复杂回复的需求的答案,矩阵变量使您能够构建复杂的请求。 从这个意义上讲,这可能只是技术时代的到来。
我现在只需要一些代码来演示我的股票投资组合情况,但是下次再讲。
翻译自: https://www.javacodegeeks.com/2014/04/just-what-are-spring-3-2-matrix-variables-part-1.html