我發(fā)現(xiàn)了一個(gè)奇怪的問題,即 urlencoding 的行為不一致。更新Spring MVC 4.3 和 5.1 版本之間存在差異:// FAIL in MVC 4.x @Testpublic void test2() { rt.getForObject("http://localhost/expr={expr}", String.class, "x/y"); Assert.assertEquals("http://localhost/expr=x%2Fy", savedUri.toString());}// FAIL in MVC 4 or 5@Testpublic void test3() { rt.getForObject("http://localhost/expr={expr}", String.class, "x+y"); Assert.assertEquals("http://localhost/expr=x%2By", savedUri.toString());}// ok in MVC 4.x, FAIL in MVC 5@Testpublic void test4() { rt.getForObject("http://localhost/expr={expr}", String.class, "x+y"); Assert.assertEquals("http://localhost/expr=x+y", savedUri.toString());}這可能是 Spring MVC 更大重構(gòu)的一部分,因?yàn)樗渤霈F(xiàn)在一個(gè)完全不同的地方問題詳情以下獨(dú)立測(cè)試最能說明我的問題。不要被ClientHttpRequestFactory- 重要的部分是最后 2 種測(cè)試方法所嚇倒。發(fā)生了什么:除法符號(hào)/正確編碼為%2F- test2() 通過添加符號(hào)+未編碼為 a %2B- 它仍然存在+并且 test3() 失敗應(yīng)該發(fā)生什么:test3() 應(yīng)該通過。+應(yīng)編碼為 %2B,因?yàn)樗?是 URL 中的特殊字符,并且被許多服務(wù)器端 Web 框架解釋為空白。這是怎么回事,是否有通用修復(fù)程序?
為什么 RestTemplate 不對(duì)“+”符號(hào)進(jìn)行 urlencode,而是對(duì)其他所有內(nèi)容進(jìn)行
慕標(biāo)琳琳
2022-12-28 14:20:28