2016-11-02 12 views
0

in meinem Controller Ich habe die requestMapping "searchUser" mit 4 Anfrage-Parameter. Für den Anfrageparameter "phoneNumber" akzeptiere ich auch Sonderzeichen wie '(', ')', '-' und '+'.RequestParam mit Sonderzeichen '+'

Erwarten Sie das Zeichen '+' alle Zeichen werden in meinem Protokoll angezeigt. Wenn ich zum Beispiel die Werte wie "+123" oder "123 + 1" sende, bekomme ich meinen Controller "123" und "123 1" Ersetzt das "+" durch ein Leerzeichen.

Es geschieht nur mit '+'

@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); 

Wissen Sie, was muss ich hinzufügen?

danke im voraus!

UPDATE:

I Angular 2 für meinen Frontend mit dem ich eine Form habe, und ich die Werte weiter zu meinem Feder-Boot-Backend senden. Mein http-Service in eckig:

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

Das liegt daran, '' '' '' 'ist ein Sonderzeichen in einer URL. Versuche es als "% 2C" an deinen Webserver zu senden. – f1sh

+0

Das ist normal. Siehe Abschnitt [Formularübermittlung] (https://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1) der HTML-Spezifikation. Wie rufen Sie die URL auf? Wenn es aus einem HTML-Formular in einem Browser aufgerufen wird, sollte das '+' automatisch in Prozent deklariert werden. – VGR

+0

@ f1sh -% 2C ist ein Komma,% 2B ist das Pluszeichen. Und um Ihrem Kommentar mehr hinzuzufügen, wird es zusätzlich als URL-Escape für Leerzeichen behandelt. Eine von wenigen Möglichkeiten, dies zu tun. Sehen Sie in URL-Codierung etwas mehr. – Quintium

Antwort

1

Ok ich löste es.

Ich habe es in meiner Front codiert. Es gab keine anderen Möglichkeiten.

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

Vielen Dank für Ihre Hilfe!

+0

Sie sollten sicherstellen, dass Ihre Front-End-URI codiert * alle * Felder. Entweder indem Sie es individuell codieren oder indem Sie sicherstellen, dass Ihr Framework sich darum kümmert. Andernfalls erhält der Benutzer Überraschungen, z.B. wenn sie ein '&' in ein Textfeld einfügen. – slim

+1

Es sieht nicht richtig aus. Die https://angular.io/docs/ts/latest/api/http/index/URLSearchParams-class.html sagt, dass es bereits standardmäßig codiert. Also, anscheinend macht etwas anderes etwas falsch - könnte eine Serverseite sein, die es zweimal oder so entschlüsselt. Versuchen Sie, rohen Verkehr zu sehen und herauszufinden, wo Sie "+" oder "" haben. – kan

+0

@slim Danke für den Rat. – trap