Lake's Blog Lake's Blog
首页
HCFrame
  • 博客搭建

    • 搜索引擎
    • SEO优化
    • 问题记录
  • Vue

    • 问题记录
  • uni-app
  • 开发

    • Spring
  • 数据库及中间件

    • Elasticsearch
    • SQL
  • 杂谈

    • 杂谈
  • 微服务

    • nacos
    • CAS
  • 算法说明

    • algorithm
  • leetCode

    • leetCode
  • 代理

    • Nginx
  • Linux

    • ubuntu
  • Docker
  • 数据库
  • 消息队列
  • openwrt
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub

Lake Liu

很菜的程序员
首页
HCFrame
  • 博客搭建

    • 搜索引擎
    • SEO优化
    • 问题记录
  • Vue

    • 问题记录
  • uni-app
  • 开发

    • Spring
  • 数据库及中间件

    • Elasticsearch
    • SQL
  • 杂谈

    • 杂谈
  • 微服务

    • nacos
    • CAS
  • 算法说明

    • algorithm
  • leetCode

    • leetCode
  • 代理

    • Nginx
  • Linux

    • ubuntu
  • Docker
  • 数据库
  • 消息队列
  • openwrt
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub
  • Spring

    • Spring通过URL传值不能携带"."???
      • 解决方案
      • 问题分析
      • 大功告成
    • Pathvariable注解允许参数为空吗?
    • Spring事务及隔离级别
    • Autowired实现多个实现类
    • SpringBoot集成EhCache
    • SpringBoot如何获取Bean列表
    • SpringBoot通过CacheManager集成redis做缓存
    • Spring不能将包含key值为null的map集合转换成JSON
  • 数据库及中间件

  • 杂谈

  • 微服务

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

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

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

# 解决方案

将url传值,改为参数传递

  • 修改前:
@GetMapping("/{ip}")
public Result getList(@PathVariable("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}
1
2
3
4
  • 修改后:
@GetMapping("/")
public Result getList(@RequestParam("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}
1
2
3
4

# 问题分析

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

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

例:

后台接口如下

@GetMapping("/{ip}")
public Result getList(@PathVariable("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}
1
2
3
4

前端传值方式如下

http://127.0.0.1/192.168.1.1
1

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

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

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

<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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

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

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

# 大功告成

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

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

编辑
#Spring#REST#Restful
上次更新: 2023/03/24, 08:53:10
Pathvariable注解允许参数为空吗?

Pathvariable注解允许参数为空吗?→

最近更新
01
IDEA行号太宽
03-11
02
uniapp中实现h5扫码功能(微信版)
08-12
03
Docker安装Rabbitmq
07-22
更多文章>
本站总访问量次 | 您是本站第位访问者
Theme by Vdoing | Copyright © 2020-2024 Lake Liu | MIT License | 背景图、Logo、头像设计@Drrizzee
  • 跟随系统
  • 深色模式
  • 浅色模式
  • 阅读模式