我使用Spring引导创建了一个GET / POST API,它有一个http url参数说refid . 现在,在调用GET / POST请求之前,该参数已被编码,例如http://localhost:8080/users/TESTFNkJXiQAH%2FJBKxigBx
但是,当我通过Spring Boot部署它时,编码的refid再次被编码并且refid会改变 . 即成为:
http://localhost:8080/users/TESTFNkJXiQAH%252FJBKxigBx
我想通过Spring启动来抑制第二个编码 . 有谁可以在这里提出建议?
3 回答
不知道你是否还有这个问题,或者你发现它为什么会发生,但是因为我试图向某人解释这个现象,我看是否已经有了一个很好的解释 . 但既然你也问过,我没有找到,这是我的答案 .
所以你编码你的refid
在通过网址发送之前,然后将其提供给浏览器 . 现在这只是编码的refid . 当您通过URL直接调用它时,您必须根据HTML URL编码标准再次对其进行编码 . 这就是为什么双重逃脱 . 另请阅读this . 例如 . 所以如果你的refid看起来像这样
你编码它你把它变成了
现在,如果您还想通过浏览器上的URL传递它,则必须再次对其进行编码 .
但是,如果服务A正在使用此服务并且服务A正确编码此refid,那么您将不会遇到此问题 . 这只是因为你试图通过浏览器调用这个api endpoints .
当然,我理所当然地认为你这样做:
在你的控制器中
首先传递解码后的URL,而不是做一些不方便的事情来停止双重编码 . 您在休息控制器中已经解码了字段 . 例如,如果您通过www.xyz.com?name=nilesh%20salpe
你会得到param name的值为“nilesh salpe”而不是“nilesh%20salpe”
这是URLDecoder的基本示例: