小言_互联网的博客

Spring MVC学习@MatrixVariable

313人阅读  评论(0)

学前须知

这是关于String MVC框架的扫描注释操作部分,感觉有点难以理解,可以先学习此框架的入门知识。

迈入正题

@MatrixVariable的使用简单来说就是获取-路径中的变量和值,也就是通过路径传递参数。

如下:

//在某路径名中有如下这些内容:

/cars;color=red;year=2020		--两个不同的变量用“;”分隔开
/cars;color=red,green,blue		--同一个变量的多个数值用“,”分隔开
/cars;color=red;color=green;color=blue	--也可以重复使用变量名

获取路径中参数的方式:

使用@MatrixVariable注释类进行获取。

需要配合使用的注释类:
1、@RequestMapping:定义路径
2、@PathVariable: 获取路径中“{ }”内变量的内容。
链接: @PathVariable学习.

注意

使用@MatrixVariable前需要添加mvc配置,不然无法使用。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven enable-matrix-variables="true"/>

</beans>

主要就是添加上 <mvc:annotation-driven enable-matrix-variables=“true”/>语句

mvc命名空间的属性知识查看我的String MVC mvc命名空间属性总结

开始获取

简单使用方式:

@RequestMapping(path = "/Demo2/{id}",method = RequestMethod.GET)
    public String test1(@PathVariable String id,@MatrixVariable String color, @MatrixVariable int year){
        System.out.println("id="+id+",color="+ color+",year="+year);
        return "success";
    }
<form action="/Demo2/66;color=red;year=2020" method="get">
     <input type="submit" value="提交">
</form>

在页面上点击提交之后结果:

浏览器显示地址样式:
/Demo2/66;color=red;year=2020?
后台控制器显示结果:
id=66,color=red,year=2020

多种使用方式:

/*获取单个参数
    * 请求路径内容:/Demo2/66;color=red;year=2020 */
    @RequestMapping(path = "/Demo2/{id}",method = RequestMethod.GET)
    public String test1(@PathVariable String id,@MatrixVariable String color, @MatrixVariable int year){
        System.out.println("id="+id+",color="+ color+",year="+year);
        return "success";
    }

    /*获取不同路径段中的变量
    * 请求路径内容:/Demo2/66;q=45/pets/77;q=34*/
    @RequestMapping(path = "/Demo2/{id1}/pets/{id2}" ,method = RequestMethod.GET)
    public String test2(@MatrixVariable(name = "q",pathVar = "id1") int q1,
                        @MatrixVariable(name = "q",pathVar = "id2") int q2){
        System.out.println("q1="+q1+",q2="+q2);
        return "success";
    }

    /*设置默认值,请求段可以不需要设置参数
    * 请求路径内容:/Demo2/pets/66*/
    @RequestMapping(path = "/Demo2/pets/{id}",method = RequestMethod.GET)
    public String test3(@MatrixVariable(required = false,defaultValue = "1")int q){
        System.out.println("q="+q);
        return "success";
    }

    /*路径中的所有变量都可以被Map获得
    * 请求路径内容:/Demo2/66;q=45;s=54/pet/77;q=23;t=95*/
    @RequestMapping(path = "/Demo2/{id1}/pet/{id2}",method = RequestMethod.GET)
    public String test4(@MatrixVariable Map<String,String> map,
                        @MatrixVariable(pathVar = "id2") Map<String,String> mapid2){
        System.out.print("map="+map.toString()+",mapid2="+mapid2.toString());
        return "success";
    }

对应表单:

<form action="/Demo2/66;color=red;year=2020" method="get">
        <input type="submit" value="提交">
    </form>
    <form action="/Demo2/66;q=45/pets/77;q=34" method="get">
        <input type="submit" value="提交">
    </form>
    <form action="/Demo2/pets/66" method="get">
        <input type="submit" value="提交">
    </form>
    <form action="/Demo2/66;q=45;s=54/pet/77;q=23;t=95" method="get">
        <input type="submit" value="提交">
    </form>

运行结果

后台控制器显示结果:
id=66,color=red,year=2020
q1=45,q2=34
q=1
map={q=45, s=54, t=95},mapid2={q=23, t=95}

关于@MatrixVariable的参数

属性 属性值 含义
name 设置要获取路径中某参数的参数名
pathVar 设置要获取参数的路径段
value 指定pathVar中的某参数名
required false 路径中可以没有这个变量
true 路径中必须有这个变量默认
defaultValue 设置默认值

云中君后话:

URI规范RFC 3986定义了在路径段中包括名称/值对的可能性,可以使用一般的“ URI路径参数”,尽管也经常使用并且相当知名的,更独特的“矩阵URI”。在Spring MVC中,这些被称为矩阵变量。


转载:https://blog.csdn.net/L_ZG_/article/details/105389787
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场