2017-03-02 17 views
0

當調用get http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo=我的春節,啓動應用程序RestController有這樣的請求處理程序:爲什麼使用springboot其餘控制器將加號(+)解碼爲url路徑中的space()?

@RequestMapping("/things/{thingId}") 
    public ResponseEntity<Thing> getThing(
     @PathVariable String thingId) { 

    System.out.println("thingId=" + thingId); 
    ... 

結果如下正在打印ZhaD2lk27XQPRJtwrABltd UTWXcbnY/TrpxGP7VDVo=什麼,而不是我本來期望ZhaD2lk27XQPRJtwrABltd+UTWXcbnY/TrpxGP7VDVo=

正如你所看到的,正在變成一個空間。這不應該發生在路徑部分,只有查詢部分。這就是爲什麼我用來構建URL的Spring UriComponentsBuilder.build().encode()沒有把加號變成%2B

我需要調整應用程序已獲得編碼斜槓(/)的工作。詳細信息請參見REST Endpoint unreachable if ID in URL contains %2F

我正在使用SpringBoot 1.4.4.RELEASE,它使用Tomcat嵌入8.5.11。
我已經嘗試從Spring RestTemplate,Postman和Chrome中調用服務。在所有情況下,相同的結果,加上變成一個空間

+0

你在瀏覽器中輸入網址嗎?還是你用js調用你的服務?還是你從一個Java客戶端調用你的服務? – reos

回答

1

我確定後,我已經能夠解決我的IDE自動添加spring-boot-starter-undertow到POM文件。我沒有從spring-boot-starter-web中排除spring-boot-starter-tomcat,所以我不確定在封面下發生了什麼,但是刪除spring-boot-starter-undertow依賴項解決了這個問題。

相關問題