前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring通过URL传值不能携带"."???

Spring通过URL传值不能携带"."???

作者头像
taixingyiji
发布于 2022-07-25 07:35:46
发布于 2022-07-25 07:35:46
59200
代码可运行
举报
运行总次数:0
代码可运行

# Spring通过URL传值不能携带"."???

在开发中暴露的问题,URL携待参数竟然不能包含"."

# 解决方案

将url传值,改为参数传递

  • 修改前:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@GetMapping("/{ip}")
public Result getList(@PathVariable("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}

1 2 3 4

  • 修改后:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@GetMapping("/")
public Result getList(@RequestParam("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}

# 问题分析

在开发过程中,突然遇到这个问题,发现前端传给后台的字符串被截断

"." 后面的内容后台无法获取

例:

后台接口如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@GetMapping("/{ip}")
public Result getList(@PathVariable("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}

前端传值方式如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/192.168.1.1

那么我们再看后台,发现接收到的值为 192.168.1

很奇怪,为什么后面的.1不见了???

我们再来看下SpringMvc的解析方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManager">
    <constructor-arg>
        <array>
            <bean class="org.springframework.web.accept.HeaderContentNegotiationStrategy"/>
            <!-- 根据后缀名来决定请求的视图类型 -->
            <bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
                <constructor-arg>
                    <map>
                        <entry key="xml" value="application/xml" />
                        <entry key="json" value="application/json" />
                        <entry key="html" value="text/html" />
                        <entry key="htm" value="text/html" />
                        <entry key="txt" value="text/plain" />
                        <entry key="xls" value="application/vnd.ms-excel" />
                    </map>
                </constructor-arg>
            </bean>
        </array>
    </constructor-arg>
</bean>

原来,SpringMvc在解析URL的时候,会把最后一个"."和后面的内容解析为后缀,然后进行内容匹配

那么如果你传的参数中,有携待"."的这种场景的话,就只能通过参数来传值了

# 大功告成

OK,那么我们通过上述方式解决了此类问题,在此也算记录一下。

参考文章:URL地址中含有点号导致参数解析错误的解决办法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 7 种阻塞队列详解
队列(Queue)是一种经常使用的集合。Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。和 List、Set 一样都继承自 Collection。它和 List 的区别在于,List可以在任意位置添加和删除元素,而Queue 只有两个操作:
海星
2020/09/27
9.5K0
(juc系列)阻塞队列(blockingqueue)及其实现
阻塞队列的方法,有四种形式来处理,操作没有办法被立刻满足,但是未来某些时间点可能满足的情况:
呼延十
2021/11/10
4600
基于链表的有界阻塞队列 —— LinkedBlockingQueue
" 上一节看了基于数据的有界阻塞队列 ArrayBlockingQueue 的源码,通过阅读源码了解到在 ArrayBlockingQueue 中入队列和出队列操作都是用了 ReentrantLock 来保证线程安全。下面咱们看另一种有界阻塞队列:LinkedBlockingQueue。 "
程序员小航
2020/11/23
5930
基于链表的有界阻塞队列 —— LinkedBlockingQueue
基于数组的有界阻塞队列 —— ArrayBlockingQueue
" 在阅读完和 AQS 相关的锁以及同步辅助器之后,来一起阅读 JUC 下的和队列相关的源码。先从第一个开始:ArrayBlockingQueue。 "
程序员小航
2020/11/23
9100
基于数组的有界阻塞队列 —— ArrayBlockingQueue
阻塞队列与非阻塞队列
Java提供很多线程安全的容器,为开发人员在并发编程场景下使用,通常我们会更加关注业务实现,而不关心底层结构。但我们应该理解这些容器的原理和使用场景,以方便我们的开发和遇到问题的分析,并且有时候也能借鉴一下大神们的实现思想。
搬砖俱乐部
2019/06/15
3.2K0
Java对阻塞队列的实现ArrayBlockingQueueLinkedBlockingQueue
什么是阻塞队列? 阻塞队列与队列基本一致,额外的支持阻塞添加和阻塞删除方法. 阻塞添加: 当队列满时,线程不断尝试向其中添加,直到有其他线程取走元素,使添加操作成功,在此期间,线程阻塞. 阻塞删除:
呼延十
2019/07/01
7400
Java对阻塞队列的实现ArrayBlockingQueueLinkedBlockingQueue
阻塞队列实现之ArrayBlockingQueue源码解析
ArrayBlockingQueue是由数组构成的有界阻塞队列,支持FIFO的次序对元素进行排序。
烂猪皮
2023/09/04
1540
阻塞队列实现之ArrayBlockingQueue源码解析
11.并发包阻塞队列之LinkedBlockingQueue
jdk1.7.0_79   在上文《10.并发包阻塞队列之ArrayBlockingQueue》中简要解析了ArrayBlockingQueue部分源码,在本文中同样要介绍的是Java并发包中的阻塞队列LinkedBlockingQueue。ArrayBlockingQueue队列是由数组实现,而LinkedBlockingQueue队列的实现则是链表(单向链表)实现,所以在LinkedBlockingQueue有一个Node内部类来表示链表的节点。 static final class Node<E
用户1148394
2018/01/12
8080
并发阻塞队列BlockingQueue解读
首先,最基本的来说, BlockingQueue 是一个先进先出的队列(Queue),为什么说是阻塞(Blocking)的呢?是因为 BlockingQueue 支持当获取队列元素但是队列为空时,会阻塞等待队列中有元素再返回;也支持添加元素时,如果队列已满,那么等到队列可以放入新元素时再放入。
大忽悠爱学习
2022/10/24
9780
并发阻塞队列BlockingQueue解读
java并发队列之阻塞队列-ArrayBlockingQueue
今天讲阻塞队列,阻塞队列有很多,这篇文章只讲解ArrayBlockingQueue,其他的大同小异。
胖虎
2019/06/26
9370
java并发队列之阻塞队列-ArrayBlockingQueue
回归Java基础:LinkedBlockingQueue阻塞队列解析
整理了阻塞队列LinkedBlockingQueue的学习笔记,希望对大家有帮助。有哪里不正确,欢迎指出,感谢。
捡田螺的小男孩
2020/04/15
4450
回归Java基础:LinkedBlockingQueue阻塞队列解析
Java集合--阻塞队列(LinkedBlockingQueue)
1. LinkedBlockingQueue 上篇中,说到了ArrayBlockingQueue阻塞队列。在ArrayBlockingQueue中,底层使用了数组结构来实现。 那么,提到数组了就不得不提及链表。作为两对成双成对的老冤家,链表也可以实现阻塞队列。 下面,就让我们进入今天的正题LinkedBlockingQueue!!!! LinkedBlockingQueue是一个使用链表实现的阻塞队列,支持多线程并发操作,可保证数据的一致性。 与ArrayBlockingQueue相同的是,LinkedBl
贾博岩
2018/05/11
3.1K0
聊聊 JDK 阻塞队列源码(ReentrantLock实现)
项目中用到了一个叫做 Disruptor 的队列,今天楼主并不是要介绍 Disruptor 而是想巩固一下基础扒一下 JDK 中的阻塞队列,听到队列相信大家对其并不陌生,在我们现实生活中队列随处可见,最经典的就是去银行办理业务等。 当然在计算机世界中,队列是属于一种数据结构,队列采用的FIFO(first in firstout),新元素(等待进入队列的元素)总是被插入到尾部,而读取的时候总是从头部开始读取。在计算中队列一般用来做排队(如线程池的等待排队,锁的等待排队),用来做解耦(生产者消费者模式),异步等等。
haifeiWu
2018/09/11
3410
并发编程4:Java 阻塞队列源码分析(上)
上篇文章 并发编程3:线程池的使用与执行流程 中我们了解到,线程池中需要使用阻塞队列来保存待执行的任务。这篇文章我们来详细了解下 Java 中的阻塞队列究竟是什么。 什么是阻塞队列 阻塞队列其实就是生
张拭心 shixinzhang
2018/01/05
1.5K0
并发编程4:Java 阻塞队列源码分析(上)
JDK容器学习之Queue: ArrayBlockingQueue
基于数组阻塞队列 ArrayBlockingQueue 前面学习了基于数组的非阻塞双端队列ArrayDeque,其内部维护一个数组和指向队列头和队列尾索引的两个成员变量;本篇则探究下基于数组的阻塞队列是什么样的数据结构,又有什么特性,相较于ArrayDeque又有什么异同;然后就是使用场景了 I. 底层数据结构 先看内部成员变量定义, 和 ArrayDequeue相比,差别不大,一个数组,两个索引;此外多了一个锁和两个判定条件 /** The queued items */ final Object[]
一灰灰blog
2018/02/06
7650
【原创】Java并发编程系列31 | 阻塞队列(上)
阻塞队列在并发编程非常常用,被广泛使用在“生产者-消费者”问题中。接下来两篇文章就来详细介绍阻塞队列。本文是阻塞队列上篇。
java进阶架构师
2020/08/17
4400
【原创】Java并发编程系列31 | 阻塞队列(上)
Java并发阻塞队列之ArrayBlockingQueue
在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步IO和轻量级任务框架;还提供了设计用于多线程上下文中的Collection实现等;
程序新视界
2022/05/09
3980
阻塞队列和ArrayBlockingQueue源码解析(JDK1.8)
什么是阻塞队列 当队列中为空时,从队列中获取元素的操作将被阻塞,当队列满时,向队列中添加元素的操作将被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其它的线程往队列中插入新的元素。同样,试图往满的队列中添加新元素的线程也会被阻塞,直到有其他的线程使队列重新变的空闲起来。 处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put() offer(e, time, unit) 移除方法 remove() poll(e) take() poll(time, u
java404
2018/05/18
8590
10.并发包阻塞队列之ArrayBlockingQueue
jdk1.7.0_79   上一节中对并发包中的非阻塞队列ConcurrentLinkedQueue的入队、出队做了一个简要的分析,本文将对并发包中的阻塞队列做一个简要分析。   Java并发包中的阻塞队列一共7个,当然他们都是线程安全的。   ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。   LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。   PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。   DealyQ
用户1148394
2018/01/12
6780
阻塞队列BlockingQueue及实现原理分析
BlockingQueue 对插入操作、移除操作、获取元素操作提供了四种不同的方法用于不同的场景中使用:
烂猪皮
2023/09/04
4680
阻塞队列BlockingQueue及实现原理分析
推荐阅读
相关推荐
Java 7 种阻塞队列详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文