2016-11-02 4 views
0

в моем контроллере У меня есть requestMapping "searchUser" с 4 параметрами запроса. Для параметра request "phoneNumber" я также принимаю специальные символы, такие как '(', ')', '-' и '+'.RequestParam со специальным символом '+'

Ожидается, что символы «+» персонажа будут показаны в моем журнале. Если я отправлю, например, значения «+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

Это нормально. См. Раздел [Форма представления] (https://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1) спецификации HTML. Как вы вызываете URL-адрес? Если он вызывается из HTML-формы в браузере, '+' должен автоматически пропускаться процентами. – VGR

+0

@ f1sh -% 2C - это запятая,% 2B - плюс. И чтобы добавить еще к вашему комментарию, плюс рассматривается как пробел URL для пробелов. Один из немногих способов сделать это. загляните в URL Encoding еще немного. – 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