javascript
Spring 3.2矩阵变量是什么? –第2部分:代码
關于Spring對Matrix Variables的支持,我最近的博客集中在解釋它們是什么以及為什么要使用它們。 整理了內容和原因之后 ,此博客全面介紹了如何以及如何使用它們。 我還給出了幾個Matrix URI的示例,因此,演示一些處理幾個URI的代碼似乎是個好主意。
 示例包括: 
如您所料,在編寫處理Matrix變量的代碼時,Spring專家通過引入新的@MatrixVariable注釋,在現有的Spring MVC框架的基礎上進行了@MatrixVariable 。 這用于注釋請求處理程序方法參數,以便Spring可以注入矩陣uri的相關位。 @MatrixVariable有四個參數: value , defaultValue , pathVar和required ,所有這些在Springs javadocs中都有詳細說明。
等等,到一些代碼...如果您還記得我在上一個有關此主題的博客中,我選擇的場景是處理大量股價/股票的場景,而Github上提供的示例應用程序采用Matrix URI,將其砍掉并將其添加到Model以供JSP顯示。
在編寫代碼時,首先要做的是創建一個新的控制器來處理URI……
@Controller @RequestMapping(value = "/matrixvars") public class MatrixVariableController { private static final Logger logger = LoggerFactory.getLogger(MatrixVariableController.class); }在代碼中,我添加了一個類級別的@RequestMapping批注,其中包含我的URI的第一塊: matrixvars 。 這是一件很有用的事情,因為它將包含值' matrixvar '的所有URI定向到此控制器的第一個路徑元素,并節省了大量重復。
接下來要做的是向此類中添加一些處理第一個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第一個請求處理程序方法是:
@RequestMapping(value = "/{stocks}", method = RequestMethod.GET) public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) { logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars }); List<List<String>> outlist = map2List(matrixVars); model.addAttribute("stocks", outlist); return "stocks"; } private List<List<String>> map2List(Map<String, List<String>> stocksMap) { List<List<String>> outlist = new ArrayList<List<String>>(); Collection<Entry<String, List<String>>> stocksSet = stocksMap.entrySet(); for (Entry<String, List<String>> entry : stocksSet) { List<String> rowList = new ArrayList<String>(); String name = entry.getKey(); rowList.add(name); List<String> stock = entry.getValue(); rowList.addAll(stock); outlist.add(rowList); } return outlist; }查看@RequestMapping批注,您可以看到我為其分配了/{stocks}的值。 當與類級別的@RequestMapping注釋結合使用時,它將指示Spring將任何匹配的請求映射到此方法。 花括號內的文本{stocks}表示可以解析URI的這一部分并將其注入到適當的方法參數中。
接下來,看看@MatrixVariable批注。 這恰好位于我希望將股票數據注入其中的論點的前面; 但是,這里有些棘手的事情是使參數類型正確。 如果您弄錯了,那么當您嘗試使用數據時,您只會得到ClassCastException 。 當輸入數據的格式為:
A=B,C,D要么
A=B,C,D;W=X,Y,Z…然后類型是Map<String,List<String>> ,其中鍵是A和W ,它們各自的值是B,C,D和X,Y,Z 。
因此,鑒于上述URI,map參數將包含…。
{BT.A=[276.70, +10.40, +3.91], AZN=[236.00, +103.00, +3.29], SBRY=[375.50, +7.60, +2]}這一點很重要,該方法的其余部分非常簡單,只需將輸入映射轉換為列表,然后將其添加到模型中,供JSP(此處未顯示)顯示。 請注意,這不是非常有用的代碼,因此不必過多地關注它,而且我不喜歡將集合嵌入集合中-這似乎不是一個好主意。
繼續,我現在看下一個URI。 請注意,我故意使它與第一個相似,唯一的區別是增加了用戶的帳戶詳細信息:
http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.90,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07/account;name=roger;number=105;location=stoke-on-trent,uk此URI映射到以下方法:
@RequestMapping(value = "/{stocks}/{account}", method = RequestMethod.GET) public String showPortfolioValuesWithAccountInfo(@MatrixVariable(pathVar = "stocks") Map<String, List<String>> stocks, @MatrixVariable(pathVar = "account") Map<String, List<String>> accounts, Model model) { List<List<String>> stocksView = map2List(stocks); model.addAttribute("stocks", stocksView); List<List<String>> accountDetails = map2List(accounts); model.addAttribute("accountDetails", accountDetails); return "stocks"; }在這種情況下,完整路徑描述為/matrixvars/{stocks}/{account} 。 我猜想這只是告訴Spring /matrixvars要查找/matrixvars ,后跟一個'/'后跟任何東西,然后是'/' ,后跟任何東西。
在這種情況下有兩種@MatrixVariable ,而我已經添加了注解的注解pathVar參數提供值stocks和accounts 。 這些整齊地標記了矩陣變量值需要注入到方法參數中的位置。
最后要記住的一點是,矩陣變量非常靈活。 @MatrixVaraible批注還有另外三個參數,我在這里沒有考慮; 但是,每種情況下的通用過程都是相同的:獲取URI,找出不同的矩陣變量,設計請求處理程序,并將URI的矩陣變量映射到您的方法參數–注意確保您獲得參數類型正確。
- Github上提供了此博客的完整示例代碼:https://github.com/roghughe/captaindebug/tree/master/spring-3.2
 
翻譯自: https://www.javacodegeeks.com/2014/05/just-what-are-spring-3-2-matrix-variables-part-2-the-code.html
總結
以上是生活随笔為你收集整理的Spring 3.2矩阵变量是什么? –第2部分:代码的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 2018年各大银行跨行转账需要多久时间?
 - 下一篇: 电脑怎么设置自动关机电脑如何设置自动关机