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

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

作者头像
taixingyiji
发布2022-07-25 15:35:46
5770
发布2022-07-25 15:35:46
举报
文章被收录于专栏:taixingyiji的博客笔记

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

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

# 解决方案

将url传值,改为参数传递

  • 修改前:
代码语言:javascript
复制
@GetMapping("/{ip}")
public Result getList(@PathVariable("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}

1 2 3 4

  • 修改后:
代码语言:javascript
复制
@GetMapping("/")
public Result getList(@RequestParam("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}

# 问题分析

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

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

例:

后台接口如下

代码语言:javascript
复制
@GetMapping("/{ip}")
public Result getList(@PathVariable("ip") String ip){
    return Result.getSuccess(serviceA.getList(ip))
}

前端传值方式如下

代码语言:javascript
复制
http://127.0.0.1/192.168.1.1

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

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

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

代码语言:javascript
复制
<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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # Spring通过URL传值不能携带"."???
    • # 解决方案
      • # 问题分析
        • # 大功告成
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档