SpringMVC路径匹配中使用通配符问题

目录
  • SpringMVC路径匹配中使用通配符
    • @RequestMapping中指定的路径也可以使用通配符*
    • 通配符不是只能放在最后的
    • 通配符还可以匹配以某字符结束的路径
    • 通配符还可以匹配以某字符开始的路径
    • 同时存在路径变量和通配符匹配时的优先级关系
  • 请求路径参数使用正则表达式

SpringMVC路径匹配中使用通配符

@RequestMapping中指定的路径也可以使用通配符*

表示任意字符。如下的处理器方法可以映射请求/antstyle/a,可以映射请求/antstyle/b,但是它不能映射请求请求/antstyle/a/b,因为它只能映射一级路径。

@RequestMapping("/antstyle/*")
public Object testAntStyle() {
    return "antStyle";
}

通配符不是只能放在最后的

它也可以放在其它位置。下面的示例中就是把通配符放在中间位置,它可以映射请求/antstyle/a/bcd,也可以映射请求/antstyle/ab/bcd。

@RequestMapping("/antstyle/*/bcd")
public Object testAntStyle() {
    return "antStyle";
}

通配符还可以匹配以某字符结束的路径

如下处理器方法可以映射/antstyle/后路径以bcd结尾的路径,比如/antstyle/abcd、/antstyle/bcd等。

@RequestMapping("/antstyle/*bcd")
public Object testAntStyle() {
    return "antStyle";
}

通配符还可以匹配以某字符开始的路径

如下处理器方法可以映射/antstyle/abc、/antstyle/abcd等。

@RequestMapping("/antstyle/abc*")
public Object testAntStyle() {
    return "antStyle";
}

一个星号只能匹配一级路径,如果需要匹配任意的多级路径则可以使用两个星号。如下处理器方法可以映射任何请求路径以/antstyle/开头的请求,如/antstyle/a、/antstyle/a/b等。

@RequestMapping("/antstyle/**")
public Object testAntStyle() {
    return "antStyle";
}

一个星号与两个星号还可以一起使用,此时一个星号还是匹配任意字符,但是只能在当前层级,而两个星号还是可以匹配任意的层级,所以如下可以匹配/antstyle/abca/xxx/xxx等。

@RequestMapping("/antstyle/abc*/**")
public Object testAntStyle() {
    return "antStyle";
}

请求映射路径中使用了通配符时,也还是可使用路径变量的,它们是相互独立的。如下代码中我们就在请求路径中同时使用了路径变量和通配符。

@RequestMapping("/antstylewithpathvariable/*/{path}/abc")
public Object testAntStyleWithPathVariable(@PathVariable String path) {
    return "ant style with path variable, path is " + path;
}

同时存在路径变量和通配符匹配时的优先级关系

当一个请求路径可以匹配多个处理器方法时,SpringMVC将优先匹配路径映射更精确的那个。

  • 拥有更少的路径变量和通配符的路径映射更精确。比如/hotels/{hotel}/*拥有一个路径变量和一个通配符,那么它会比/hotels/{hotel}/**更精确,会优先匹配,因为后者拥有一个路径变量和两个通配符。
  • 如果两个路径映射的通配符数量是一样的,则指定的信息更多那个路径会更精确,比如/hotels/abc*比/hotels/*更精确。
  • 路径变量比通配符更精确。比如/hotels/{hotel}比/hotels/*更精确。
  • 默认映射/**比其它所有的路径映射的优先级都低,比如/{a}/{b}就比它更精确。
  • 拥有两个通配符的路径映射比其它没有两个通配符的路径映射的优先级都低,比如/abc/**的优先级低于/abc/{a}。

(注:本文是基于Spring4.1.0所写)

请求路径参数使用正则表达式

@GetMapping("/user/{id:\\d+}")  //使用正则指定Id为数字
     public User getInfo(@PathVariable String id){
         ...
     }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • spring mvc路径匹配原则详解

    在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径的.例如: <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.i360r.platform.webapp.runtime.view.interceptor.GenericInterceptor"

  • java SpringMVC学习使用详解

    Controller学习(Spring官网) SpringMVC 标记 某些java代码使其成为Controller,从而这些代码具有和前端网页 交互数据的功能了. 在学习controller之前先把SpringMVC大致捋一下: 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供

  • 详解SpringMVC Controller介绍及常用注解

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注

  • SpringMVC路径匹配中使用通配符问题

    目录 SpringMVC路径匹配中使用通配符 @RequestMapping中指定的路径也可以使用通配符* 通配符不是只能放在最后的 通配符还可以匹配以某字符结束的路径 通配符还可以匹配以某字符开始的路径 同时存在路径变量和通配符匹配时的优先级关系 请求路径参数使用正则表达式 SpringMVC路径匹配中使用通配符 @RequestMapping中指定的路径也可以使用通配符* 表示任意字符.如下的处理器方法可以映射请求/antstyle/a,可以映射请求/antstyle/b,但是它不能映射请求

  • 解决springmvc使用@PathVariable路径匹配问题

    一.问题 今天作毕设的时候,在搭建ssm框架的使用使用springmvc的@PathVariable时出现了一个路径匹配的问题,最后花了点时间解决了. 代码结构: 问题内容: 访问url为: 按照道理说,我应该到jsp的index页面去.最后的结果确实到了index页面,可是由于该页面引用了几个css和js,报异常找不到.有使用过spring经验的童鞋应该知道使用如下代码解决静态资源的访问. // 方法一 <mvc:default-servlet-handler/> // 方法二 <mv

  • Mybatis如何解决sql中like通配符模糊匹配问题

    目录 sql中like通配符模糊匹配问题 将查询条件通过功能类处理 后台Contronller获得查询条件 mapper.xml中对应的使用方法 使用like实现模糊匹配 方式一 方式二 方式三 sql中like通配符模糊匹配问题 针对oracle数据库: 将查询条件通过功能类处理 /**      * Description: 处理转义字符%和_,针对ORACLE数据库      *       * @param str      * @return      */     public st

  • 在 Python 中使用通配符匹配字符串的方法

    目录 使用通配符匹配字符串: 使用正则表达式使用通配符匹配字符串 使用通配符匹配字符串: 使用 fnmatch.filter() 方法从列表中获取匹配模式的字符串. 使用 fnmatch.fnmatch() 方法检查字符串是否与模式匹配. import fnmatch a_list = ['fql.txt', 'jiyik.txt', 'com.csv'] pattern = '*.txt' filtered_list = fnmatch.filter(a_list, pattern) prin

  • Spring源码之请求路径匹配路由方式

    目录 请求路径匹配路由 入口 进入上面方法 SpringMVC 将请求找到匹配的处理 初始化映射关系 从映射关系中寻找匹配方法 请求路径匹配路由 在spring中,当一个请求过来的时候会做路径匹配,下面我们就从源码层面分析一下路径匹配. 示例: @RequestMapping(value = "/user/{aid}/online/**", method = RequestMethod.GET) 我们一起看看这个方法是如何寻找的,和一些相应的工具类 入口 我的项目使用的是自动配置的Re

  • 基于springMVC web.xml中的配置加载顺序

    目录 springMVC web.xml中的配置加载顺序 1.Spring上下文环境的配置文件 2.SpringMVC配置文件 加载顺序是 web.xml加载顺序及Spring包扫描注意 1.web.xml文件中配置文件加载顺序 2.SpringMVC配置事务管理时 springMVC web.xml中的配置加载顺序 在这里就不详细说web.xml的文件中的具体配置,就简单说明一下其中配置信息的加载顺序: 在web.xml文件中元素的加载顺序与它们在 web.xml 文件中的先后顺序无关. 加载

  • 基于Ant路径匹配规则AntPathMatcher的注意事项

    目录 AntPathMatcher前言 基本规则 注意事项 测试用例 spring url匹配工具类----AntPathMatcher 具体使用场景 请求body的二次写入 AntPathMatcher前言 (1)SpringMVC的路径匹配规则是依照Ant的来的,实际上不只是SpringMVC,整个Spring框架的路径解析都是按照Ant的风格来的: (2)AntPathMatcher不仅可以匹配Spring的@RequestMapping路径,也可以用来匹配各种字符串,包括文件路径等. 基

  • Servlet映射路径匹配解析详解

    目录 开头 源码 精确匹配 通配符匹配 (路径匹配) 扩展名匹配(后缀匹配) 首页welcome资源匹配 默认匹配 开头 servlet是javaweb用来处理请求和响应的重要对象,本文将从源码的角度分析tomcat内部是如何根据请求路径匹配得到处理请求的servlet的 假设有一个request请求路径为/text/servlet/get,并且在web.xml中配置了4个servlet,代码如下,那么该请求调用的是哪一个servlet呢? <servlet> <servlet-name

  • 在MySQL中使用通配符时应该注意的问题

    现象: 有一个表 action_conf,数据如下: 如果想获取以exp_site_10_开头的en_name的记录,sql语句该如何写? so easy! select en_name from action_conf where en_name like 'exp_site_10_%' 很自信的在idb中执行了这条sql,就会发现结果并不是所预期的. 你会发现,执行上面的sql会把所有以 exp_site_10开头的记录都列出来了.    原因: 其实,这都是sql中的通配符在作怪.在sql

随机推荐