返回顶部
首页 > 资讯 > 精选 >滥用@PathVariable导致出现bug如何解决
  • 467
分享到

滥用@PathVariable导致出现bug如何解决

2023-07-04 19:07:30 467人浏览 八月长安
摘要

这篇“滥用@PathVariable导致出现bug如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“滥用@PathVar

这篇“滥用@PathVariable导致出现bug如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“滥用@PathVariable导致出现bug如何解决”文章吧。

    前言

    先说结论吧:@PathVariable可以使请求参数动态的绑定到URL上,但是如果请求参数中包含特殊字符,比如 /,就可能导致spring匹配到一个错误的URL,或者匹配不到合适的URL。

    复现

    下面,我用一个简单的伪代码复现一下这个bug,与大家分析一下这个bug发生的原因,以及如何解决,最后顺便再通过源码加深一下印象。

    如下,我们定义一个接口,并且通过@PathVariable将入参动态的绑定到URL上。

    @RestController@RequestMapping(value = "/demo")public class DemoController {    @GetMapping(value = "/getVal/{val}")    public ResponseEntity<Object> getVal(@PathVariable String val){        System.out.println("参数:" + val);        return ResponseEntity.ok(val);    }}

    然后我们测试一下这个接口:

    滥用@PathVariable导致出现bug如何解决

    正常情况下,我们输入一个普通无特殊符号的参数,控制台也成功打印了出来。

    但是业务参数往往是不可控的,比如当参数变成“ hello/world”时,代码就不能正常执行了。

    滥用@PathVariable导致出现bug如何解决

    大家可以从图中看到,Spring将原本预期的URL:/demo/getVal/{val},解析成了/demo/getVal/hello/world。

    而之所以测试同学最近才发现这个接口有问题,也正是因为上线之初并没有遇到带有/的参数,所以接口看起来是正常的,直到最近在生产环境遇到了一个带/的参数。

    正确的做法是:将URL定义为/demo/getVal,然后将参数通过表单或者query的方式传递。

    滥用@PathVariable导致出现bug如何解决

    解决的办法很简单,相信有点经验的同学都能很快将这个问题修复。

    但是知其然,更要知其所以然,顺着这个问题,我们探究一下Spring究竟是如何解析URL的。

    首先,我们找到Spring WEBmvc的包,在org.springframework.web.servlet.handler包下找到AbstractHandlerMethodMapping类,这个类就是会将我们定义的mapping和URL绑定起来。

    这个类中的lookupHandlerMethod方法,会查找当前请求的最佳匹配处理程序方法,并且如果找到多个匹配项,就选择最佳匹配项。

    滥用@PathVariable导致出现bug如何解决

    分析这个方法,我们可以得到这样3个匹配步骤

    3个匹配步骤

    1,根据Path精准匹配

    滥用@PathVariable导致出现bug如何解决

    2,如果精准匹配没有成功,就开始模糊匹配

    滥用@PathVariable导致出现bug如何解决

    3,如果模糊匹配还匹配不上,就返回null

    滥用@PathVariable导致出现bug如何解决

    滥用@PathVariable导致出现bug如何解决

    以上就是关于“滥用@PathVariable导致出现bug如何解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: 滥用@PathVariable导致出现bug如何解决

    本文链接: https://lsjlt.com/news/346942.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 滥用@PathVariable导致出现bug如何解决
      这篇“滥用@PathVariable导致出现bug如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“滥用@PathVar...
      99+
      2023-07-04
    • 不规范使用ThreadLocal导致bug如何解决
      这篇文章主要讲解了“不规范使用ThreadLocal导致bug如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“不规范使用ThreadLocal导致bug如何解决”吧!因为线程重用导致的...
      99+
      2023-07-04
    • xxl-job如何滥用netty导致的问题及解决方案
      目录一、xxl-job存在的多端口问题二、源码追踪三、使用spring-mvc替换netty的功能四、测试五、实际使用netty作为一种高性能的网络编程框架,在很多开源项目中大放异彩...
      99+
      2024-04-02
    • 不规范使用ThreadLocal导致bug分析解决
      目录因为线程重用导致的信息错乱的bug正确使用的姿势更优雅的处理方式最后因为线程重用导致的信息错乱的bug ThreadLocal一般用于线程间的数据隔离,通过将数据缓存在Thre...
      99+
      2023-01-08
      ThreadLocal bug解决分析 ThreadLocal bug
    • 解决@PathVariable出现点号.时导致路径参数截断获取不全的问题
      目录@PathVariable出现点号.时导致路径参数截断获取不全1、问题2、解决方案@PathVariable中带有.等特殊符号的处理方式例如假如用需要修改@PathVariabl...
      99+
      2024-04-02
    • mysql内存表导致内存溢出如何解决
      内存表导致内存溢出的问题可以通过以下几种方式解决: 增加服务器内存:如果内存表导致内存溢出,可以尝试增加服务器的内存,以提供更多...
      99+
      2024-04-09
      mysql
    • win7电脑待机导致系统出现断网现象如何解决
      本文小编为大家详细介绍“win7电脑待机导致系统出现断网现象如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“win7电脑待机导致系统出现断网现象如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。解决方...
      99+
      2023-06-27
    • win11打开pdf文件出现bug如何解决
      这篇文章主要讲解了“win11打开pdf文件出现bug如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win11打开pdf文件出现bug如何解决”吧!win11打开pdf文件出现bug...
      99+
      2023-07-01
    • win11导致office不可用如何解决
      本篇内容介绍了“win11导致office不可用如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法一: 如果我们使用的是正版offi...
      99+
      2023-07-01
    • 如何解决Mybatis导致的问题
      本篇内容介绍了“如何解决Mybatis导致的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景前段时间...
      99+
      2024-04-02
    • php原因导致cpu100%如何解决
      本篇内容介绍了“php原因导致cpu100%如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php原因导致cpu100%的解决办法:1...
      99+
      2023-07-04
    • eclipse导入包出现乱码如何解决
      要解决eclipse导入包出现乱码的问题,可以尝试以下几个步骤: 确定乱码的具体表现形式,是在包名中、类名中、还是在注释、字符串...
      99+
      2023-10-26
      eclipse
    • 如何解决Firefox奇怪的文字溢出bug
      本篇文章给大家分享的是有关如何解决Firefox奇怪的文字溢出bug,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近在我的本机win 7 +...
      99+
      2024-04-02
    • 如何解决催化剂8.11驱动bug导致Vista x64双卡交火蓝屏的问题
      本篇文章为大家展示了如何解决催化剂8.11驱动bug导致Vista x64双卡交火蓝屏的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。AMD Catalyst 8.11驱动在不久前更新,号称修正...
      99+
      2023-06-14
    • 如何解决Vue.js导出Excel出现乱码的问题
      Vue.js是一款流行的前端 JavaScript 框架。在Vue.js开发中,使用二进制文件来导出Excel文件时,可能会遇到Excel乱码的问题。这篇文章将通过介绍二进制编码的概念和解决方案来帮助大家解决Vue.js导出Excel出现乱...
      99+
      2023-05-14
    • selinux导致ftp上传失败如何解决
      这篇文章主要介绍“selinux导致ftp上传失败如何解决”,在日常操作中,相信很多人在selinux导致ftp上传失败如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”selinux导致ftp上传失败如...
      99+
      2023-06-13
    • php进程多导致cpu高如何解决
      要解决PHP进程多导致CPU高的问题,可以采取以下几种方法:1. 优化代码:检查代码中是否存在死循环、重复执行的问题,尽量避免无意义...
      99+
      2023-09-26
      php
    • win10导致笔记本发烫如何解决
      这篇“win10导致笔记本发烫如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10导致笔记本发烫如何解决”文章吧...
      99+
      2023-07-02
    • @NonNull导致无法序列化如何解决
      这篇文章主要介绍“@NonNull导致无法序列化如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“@NonNull导致无法序列化如何解决”文章能帮助大家解决问题。@NonNull导致无法序列化的...
      99+
      2023-07-04
    • mongodb的pia导致无法启动如何解决
      当 MongoDB 的 PIA(Private IP Access)被启用时,可能会导致无法启动 MongoDB。PIA 是一种安全...
      99+
      2023-09-01
      mongodb
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作