SpringMVC的矩阵变量(学习笔记,2021.01.17)

SpringMVC的矩阵变量(学习笔记,2021.01.17)

前言:

根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对。规范中没对对应的术语。一般 “URL 路径参数” 可以被应用,尽管更加独特的 “矩阵 URI” 也经常被使用并且相当有名。在 Spring MVC 它被成为矩阵变量

矩阵变量可以出现在任何路径片段中,每一个矩阵变量都用分号(;)隔开。比如 “/get;name=zhihao;age=18”。多个值可以用逗号隔开,比如 “age=18,20,25”,或者分开写 “age=18;age=20;age=25”。

如果你希望一个 URL 包含矩阵变量,那么请求映射模式必须用 URI 模板来表示这些矩阵变量。这样的话,不管矩阵变量顺序如何,都能够保证请求可以正确的匹配。

SpringMVC中使用矩阵变量

1.0 上下文配置文件中启用矩阵变量

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

1.1 编写接收矩阵变量的Controller

	/**
     * 矩阵变量是包含在路径中的, 所以/get/xxx;name=zhohao;ages=18,20,25, 必须包含path
     *
     * @param path
     * @param name
     * @param ages
     * @return java.util.Map<?,?>
     * @author: ZhiHao
     * @date: 2021/1/17
     */
    @GetMapping("/get/{path}")
    public Map<?, ?> get(@PathVariable("path") String path,
                         @MatrixVariable("name") String name,
                         @MatrixVariable("ages") List<Integer> ages) {
        Map<String, Object> result = new HashMap<>();
        result.put("name", name);
        result.put("path", path);
        result.put("ages", ages);
        return result;
    }

1.2 请求后输出的结果

ss2Vp9.jpg

SpringBoot中使用矩阵变量

1.0 启用Boot使用矩阵变量

org.springframework.web.util.UrlPathHelperprivate boolean removeSemicolonContent = true; 默认是不启用的, 进行启用。

@Configuration
public class WbeConfig implements WebMvcConfigurer {
    
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelper();
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }
}

1.1 编写接收矩阵变量的Controller (同上面一模一样)

1.2 请求结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NYAXwp8-1610883447594)(https://s3.ax1x.com/2021/01/17/ss2Vp9.jpg)]

PS, 只是提供了另一种传递参数的方式, 这种情况工作中很少使用, 基本都是使用 querySteing方式 :

http://localhost:8080/get/路径?name=zhohao&ages=18&ages=20&ages=25

后端接收:

@GetMapping("/gets")
public Map<?, ?> gets(String name,String ages) {
    String[] split = ages.split(",");
    Map<String, Object> result = new HashMap<>();
    result.put("name", name);
    result.put("ages", split);
    return result;
}

1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵懵懂懂程序员

如果节省了你的时间, 请鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值