2016-11-02 87 views
0

的RequestParam我有requestMapping「searchUser」和4個請求參數。 對於請求參數「phoneNumber」,我還接受特殊字符,如'(',')',' - '和'+'。在我的控制器中使用特殊字符'+'

期待字符'+'所有字符都顯示在我的日誌中。如果我發送例如「+123」或「123 + 1」等值,我可以獲得我的控制器「123」和「123 1」 它用空格替換「+」。

只用 '+' 發生

@RequestMapping(method = RequestMethod.GET, value = "/search", produces = "application/json") 
    public List<User> getWebUserProfiles(HttpServletRequest request, HttpServletResponse response, 
     @RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName, 
     @RequestParam("email") String email 
     @RequestParam("phoneNumber") String phoneNumber); 

你知道我有什麼補充?

在此先感謝!

UPDATE:

我採用了棱角分明2我的前端,我有一個表格,我再發送值到我的春天啓動的後端。 我的http服務角:

search(searchParams: any){ 
     let params = new URLSearchParams(); 
     params.set('firstName', searchParams.firstName); 
     params.set('lastName', searchParams.lastName); 
     params.set('email', searchParams.email); 
     params.set('phoneNumber', searchParams.phoneNumber); 

     return this._http.get(this.baseURL+'search', 
         { search:params }) 
         .map(response => response.json()) 
         .catch(this.handleError); 
    } 
+0

這是因爲「+」是URL中的特殊字符。嘗試將它作爲「%2C」發送到您的網絡服務器。 – f1sh

+0

這很正常。請參閱HTML規範的[表單提交](https://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1)部分。你如何調用URL?如果它是從瀏覽器中的HTML表單調用的,那麼'+'應該自動進行百分比轉義。 – VGR

+0

@ f1sh - %2C是逗號,%2B是加號。爲了增加更多的評論,plus被視爲空間的URL轉義。幾種方法之一。陷阱更多地查看URL編碼。 – Quintium

回答

1

好吧,我解決了它。

我把它編碼在我的前端。沒有其他選擇。

params.set('phoneNumber',encodeURIComponent(searchParams.phoneNumber));

謝謝你的幫助!

+0

您應該確保您的前端URI編碼*所有*字段。要麼通過單獨編碼,要麼通過確保您的框架處理它。否則,用戶將會感到驚訝,例如如果他們將一個'&&放入文本字​​段中。 – slim

+1

它看起來不正確。 https://angular.io/docs/ts/latest/api/http/index/URLSearchParams-class.html表示它已經在默認情況下進行編碼。所以,顯然其他事情是做錯了事 - 可能是服務器端解碼它兩次或什麼。嘗試查看原始交通情況,並找出您擁有「+」或「」的位置。 – kan

+0

@slim感謝您的建議。 – trap