如何替换@PathVariable中的变量

目录
  • 替换@PathVariable的变量
  • @pathvariable注解的使用

替换@PathVariable的变量

因为要对接口进行统计, 而项目中用到了@PathVariable的注解, 也就是uri中携带请求参数的方式. 导致一个接口统计出来很多个请求, 比如 /api/get/1, /api/get/2 …

在网上找到可以通过

Map<String, String> pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);

拿到这个PathVariable参数. 于是初步代码如下, 将/api/get/{id} 这个变量替换成常量{x}.

import com.google.common.base.Joiner;
import javax.servlet.*;
  /**
   * 获取 去除掉 PathVariable 后的uri
   * @param request
   * @return
   */
  private String getPureUri(HttpServletRequest request) {
    String url = request.getRequestURI();
    Map<String, String> pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
     if (pathVariables != null && !pathVariables.isEmpty()){
      String[] split = url.split("/");
      for (String pathVal : pathVariables.values()) {
        for (int i = split.length - 1; i >= 0; i--) {
          if (split[i].equals(pathVal)){
            //替换成{x},也可以直接替换成""去掉
            split[i] = "{x}";
            break;
          }
        }
      }
      url = Joiner.on("/").join(split);
    }
    return url;
  }

@pathvariable注解的使用

带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义。

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

@PathVariable("xxx") 绑定到操作方法的入参中。

    //@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写
    @GetMapping("/getUserById/{id}")
    public User getUser(@PathVariable("id") Long userId){
        return userService.selectUserById(userId);
    }

不需要使用问号传参,不需要写key=valuel,直接写value即可.

若方法参数名称和需要绑定的uri template中变量名称一致时,可以简写:

    //@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
    @GetMapping("/getUserByName/{userName}")
    public User getUserByName(@PathVariable String userName){
        return userService.selectUserByUserName(userName);
    }

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

(0)

相关推荐

  • 基于@PathVariable注解的用法说明

    带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义. 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过 @PathVariable("xxx") 绑定到操作方法的入参中. 补充:@PathVariable接收两个参数 首先,@PathVariable无法接收对象,但是可以接收多个值 var data = obj.data;

  • 如何处理@PathVariable中的特殊字符问题

    上代码: @GetMapping(value="/user/{useraccount}") public void getUserAccount(@PathVariable("useraccount") String userAccount) { logger.info("useraccount :" + userAccount); } 正常访问: /user/zhangsan 打印:useraccount : zhangsan 看似一切正常 b

  • 如何在拦截器中获取url路径里面@PathVariable的参数值

    目录 在拦截器中获取url路径里@PathVariable参数值 解决办法 示例接口 完整示例 spring @PathVariable:请求路径url 上有变量值,通过@PathVariable获取 示例: 在拦截器中获取url路径里@PathVariable参数值 解决办法 Map pathVariables = (Map) request.getAttribute( HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); String class

  • 如何替换@PathVariable中的变量

    目录 替换@PathVariable的变量 @pathvariable注解的使用 替换@PathVariable的变量 因为要对接口进行统计, 而项目中用到了@PathVariable的注解, 也就是uri中携带请求参数的方式. 导致一个接口统计出来很多个请求, 比如 /api/get/1, /api/get/2 - 在网上找到可以通过 Map<String, String> pathVariables = (Map) request.getAttribute(HandlerMapping.U

  • PHP替换Word中变量并导出PDF图片的实现方法

    在线生成合同信息,一个 word 文件里面有些信息需要通过数据库读取计算出并填写到 word 文档中最终显示在线 pdf 预览功能,接下来我交大家如果实现该需求 2.接下来实现如何替换文档内容 我们新建一个 aa.docx 的文档,里面放了一个变量信息 3.接下来使用 php 来替换这个变量信息 代码如下 ... use PhpOffice\PhpWord\TemplateProcessor; ... $path = storage_path('aa.docx'); // 生成world 存放目

  • php中替换字符串中的空格为逗号','的方法

    今天在网查到一篇介绍php中替换字符串中的空格为逗号','的文章,作个日记保存下来. 复制代码 代码如下: <pre name="code" class="php"><? php /* * 关键词中的空格替换为',' */ public function emptyreplace($str) { $str = str_replace(' ', ' ', $str); //替换全角空格为半角 $str = str_replace(' ', ' ',

  • Smarty中常用变量操作符汇总

    本文汇总了Smarty中常用变量操作符,分享给大家供大家参考.具体如下: php模板引擎smarty的变量操作符可用于操作变量,自定义函数和字符. 语法中使用"|"应用变量操作符,多个参数用":"??指簟?/DIV> capitalize[首字母大写] count_characters[计算字符数] cat[连接字符串] count_paragraphs[计算段落数] count_sentences[计算句数] count_words[计算词数] date_f

  • Python 如何访问外围作用域中的变量

    在表达式中引用变量时,Python 会按照如下的顺序遍历各个作用域,寻找该变量: 当前函数作用域 任何外围作用域(比如包含当前函数的其他函数) global 作用域,即代码所在的模块的作用域 如果上述作用域内都找不到变量,就会报 NameError 异常. 但是对变量赋值时,规则会有所不同. 如果当前作用域变量已存在,那么其值会被替换. 如果不存在,则会视为在当前作用域定义新变量,而不是向外围作用域中寻找. 如下函数 def function(): flag = True def helper(

  • js 截取或者替换字符串中的数字实现方法

    在js操作表格时,我们经常会需要得到或者修改name中的下标,如:name="cust[1]/custName"; 替换:name.replace(/[\d]+/,num); //num为你需要替换成的数字变量 获取:name.match(/[\d]+/). 获取多个:name.match(/[\d]+/g). 以上这篇js 截取或者替换字符串中的数字实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 详解C++编程中的变量相关知识

    在程序运行期间其值可以改变的量称为变量.一个变量应该有一个名字,并在内存中占据一定的存储单元,在该存储单元中存放变量的值.请注意区分变量名和变量值这两个不同的概念,见图 变量名规则 先介绍标识符的概念.和其他高级语言一样,用来标识变量.符号常量.函数.数组.类型等实体名字的有效字符序列称为标识符(identifier).简单地说,标识符就是一个名字.变量名是标识符的一种,变量的名字必须遵循标识符的命名规则. C++规定标识符只能由字母.数字和下划线3种字符组成,且第一个字符必须为字母或下划线.下

  • php替换超长文本中的特殊字符的函数代码

    复制代码 代码如下: function unhtml($content){ $content=htmlspecialchars($content); $content=str_replace(chr(13),"<br>",$content); $content=str_replace(chr(32),"<br>",$content); $content=str_replace("[_[","<",

  • 在Python中实现替换字符串中的子串的示例

    假如有个任务: 给定一个字符串,通过查询字典,来替换给定字符中的变量.如果使用通常的方法: >>> "This is a %(var)s" % {"var":"dog"} 'This is a dog' >>> 其实可以使用string.Template类来实现上面的替换 >>> from string import Template >>> words = Template

  • Linux 删除和替换文件中某一行的方法【推荐】

    如果有一个abc.txt文件,内容是: aaa bbb BATBUSINESSTYPE, INSIDEID--) ONLINE; INSIDEID--) ONLINE ccc ddd eee fff 如果要删除ddd,那么脚本可以这样写: sed -i '/ddd/d' abc.txt 如果删除的是一个变量的值,假如变量是var,应该写成: sed -i '/'"$var"'/d' abc.txt 至于grep -v aaa abc.txt这个方法,是无法将修改的结果写入abc.txt

随机推荐