@PathVariable注解应该不是新鲜东西了Spring3.0就开始有了

URL中通过加占位符把参数传向后台

举个栗子,如下比较要说的内容比较简单就大概齐的写一下

画面侧

$.ajax({
type : "GET",
url : /test/code1,
dataType : "html",
success : function(data, status, xhr) {
//TODO
},
error : function(XMLHttpRequest, status, errorThrown) {
//TODO
}
});

这里的code1 就是你要传入的参数了

Contoller侧

@RequestMapping(value = "/test/{code}", method = RequestMethod.GET)
public String getTestName(@PathVariable String code) {
//TODO
}

[{code}]在URL中的占位符,用@PathVariable注解来做映射
※这里有一个注意点就是 url 中的 code 参数名 要和 @PathVariable 注解的这个 code 参数名要一致
背景算是说完了,现在就可以拿着用了
接下来说遭遇的问题 先说[#]
如果你入力的内容中包含#号那么就是悲剧了
要么404 要么找的不对然后画面崩溃

如果你没报出404的情况有可能是因为他找到了初期化的那个函数并非你期待的那个

比如,如下

虽然的url是/mst_users/#/

但它找的是/mst_users后面的#号被无视了

我们期待的是下面的这个函数

@RequestMapping(value = "/mst_users/{userId}", method = RequestMethod.GET)
@ResponseBody
public String getSkuName(@PathVariable("userId") String userId,HttpServletRequest request) {

这时候的解决方案就是转码
先找到了escape()函数还有如下
【该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。
废弃的 escape() 方法生成新的由十六进制转义序列替换的字符串. 使用 encodeURI 或 encodeURIComponent 代替.】
虽然不推荐但可以先试试

现在已经明显看到 # 被编译成 %23 ok继续走

果然这次进到了我们期待的函数了且 %23也自动解码成#了

ps encodeURIComponent函数也试过了没问题这里就不贴代码了

他们的主要的区别就是各个函数的编码和不编码的范围不一样需要的自己查一下吧

继续说当遇到[.]

这个也比较有意思 如果你传入的类似 1.2 、a.b 这样的那么 后天接收到的可能是这样的

1.2  → 1

a.b →  a

即使用了转码函数也没用因为刚刚说的那个两个函数都不会都【.】进行转码的

找到了两个解决方法

①在URL得占位参数后面加上【:.+】

  比如  /mst_users/{userId} → /mst_users/{userId:.+}

②在原本的后面加【.{ext}】当然你的函数列表里也得追加 【@PathVariable("ext") String ext】

  就是把【.】前后分成了两个参数来接收

看一下①的效果吧

②就不贴图了 说一下问题吧

①和②都有的问题 就是 如果只输入 【.】的话都会报错还是找不到对的函数

这是比较郁闷的就是说即使用了这些解决办法还是不能接受任意的输入

可能还是要配合相应的check来使用吧...

ps:【/】同【.】就不赘述了...

------------------------------------------------------------------------------------------------

如果你是任性期待可以接收任意输入的 也不是绝对不行

比如 自己定义 把【.】【/】对应的转换特定的字符然后到后台在转换出来

但是呢 这样吧 一是不够哦优雅或者直接可以说成笨拙 二就是有个bug

既然你已经任性的可以输入任意了那么别人的输入就是你的特定字符这就尴尬

所以必要的check还是少不了的 仅是私以为 如果有什么好的也请告知,学习

------------------------------------------------------------------------------------------------

最后的比较靠谱的解决方案

一就是上面写的两个解决方法 + 对应的check

二就是这种URL里传值的方式就被放弃之间 换成传统的json 传输吧

这些都是很个人的想法,如果有更好的请不吝分享

Spring 当 @PathVariable 遇上 【. # /】等特殊字符的更多相关文章

  1. 当@PathVariable遇上中文和点

    当@PathVariable遇上中文和点 Spring MVC从3.0开始支持REST,而主要就是通过@PathVariable来处理请求参数和路径的映射.  由于考虑到SEO的缘故,很多人喜欢把新闻 ...

  2. jQuery选择器遇上一些特殊字符

    学习jQuery过程中,发现一些特殊字符,如“.”,“#”,"(","]"等.它在选择器应用时,按照普通处理就会出错.解决办法,就是使用转义字符来处理,这有点象 ...

  3. 当DataTable的列名遇上特殊字符"["和"]"时

    刚才有看到一个问题http://bbs.csdn.net/topics/390781072.是在DataTable获取某列最小值,但是在动态生生DataTable时,列名有遇上特特殊字符"[ ...

  4. RowFilter遇上特殊字符*%'[]\

    开发时,时不时需要分析DataView的数据.计算,过滤等 .但是处理的值有可能会遇上是带有特殊字符*.%.'.[.]和\ .需要手动在表达式中,处理这些特殊字符,需要再使用"[" ...

  5. Spring MVC的文件上传

    1.文件上传 文件上传是项目开发中常用的功能.为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...

  6. 谁还没遇上过NoClassDefFoundError咋地——浅谈字节码生成与热部署

    谁还没遇上过NoClassDefFoundError咋地--浅谈字节码生成与热部署 前言 在Java程序员的世界里,NoClassDefFoundError是一类相当令人厌恶的错误,因为这类错误通常非 ...

  7. Spring MVC @PathVariable被截断

    一.问题描述 一个控制器提供RESTful访问信息: @RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + &qu ...

  8. 微服务中台落地 中台误区 当中台遇上DDD,我们该如何设计微服务

    小结: 1. 微服务中台不是 /1堆砌技术组件就是中台 /2拥有服务治理就是中台 /3增加部分业务功能就是中台 /4Cloud Native 就是中台 https://mp.weixin.qq.com ...

  9. 四探循环依赖 → 当循环依赖遇上 BeanPostProcessor,爱情可能就产生了!

    开心一刻 那天知道她结婚了,我整整一个晚上没睡觉,开了三百公里的车来到她家楼下,缓缓的抽了一支烟...... 天渐渐凉了,响起了鞭炮声,迎亲车队到了,那天披着婚纱的她很美,真的很美! 我跟着迎亲车队开 ...

随机推荐

  1. 原来你是这样的JAVA[03]-继承、多态、抽象类

    一.继承 Java中的继承使用关键字extends ,跟C#的语法略有差别. 1.子类构造器 java会自动在子类的构造器中插入对父类构造器的调用,也就是说在子类可以访问父类之前已经完成了父类的初始化 ...

  2. mongodb 聚合查询

    操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的字段排序结 ...

  3. deeplearning.ai 改善深层神经网络 week2 优化算法 听课笔记

    这一周的主题是优化算法. 1.  Mini-batch: 上一门课讨论的向量化的目的是去掉for循环加速优化计算,X = [x(1) x(2) x(3) ... x(m)],X的每一个列向量x(i)是 ...

  4. Codeforces 725B Food on the Plane

    B. Food on the Plane time limit per test:2 seconds memory limit per test:256 megabytes input:standar ...

  5. bzoj:1699;poj 3264: [Usaco2007 Jan]Balanced Lineup排队

    Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置 ...

  6. c++(单词统计)

    在面试环节中,有一道题目也是考官们中意的一道题目:如果统计一段由字符和和空格组成的字符串中有多少个单词? 其实,之所以问这个题目,考官的目的就是想了解一下你对状态机了解多少. (1) 题目分析 从题目 ...

  7. Myeclipse xml标签代码提示,引入schema

    以SpringMVC为例 先引入命名空间 需要配置 xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schema ...

  8. [国嵌攻略][090][linux网络编程模型]

    编程模型 Socket的实质就是一个接口,利用该接口,用户在使用不同的网络协议时,操作函数得以统一.而针对不同协议的差异性操作,则交给了Socket去自行解决. TCP编程模型 UDP编程模型

  9. 关于Swing窗体有时候要放大缩小边框才能显示问题?

    有时候会出现编写swing窗体后添加的组件在run之后显示不出来的问题.如图: 搜了下解决办法.此时如果是程序里面有panel组件的话,应该这样: labels[i] = new Label(lett ...

  10. MLlib--SVD算法

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/4db529fa9f4c042673c6dc8218251f6c.html SVD算法 1.1什么是SVD?   ...