2016-11-02 1 views
0

내 컨트롤러에 4 개의 요청 매개 변수로 requestMapping "searchUser"가 있습니다. 요청 매개 변수 "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); 

당신은 내가 추가 할 필요가 무엇인지 알고 계십니까?

미리 감사드립니다.

업데이트 : 양식이 있고 나는 나의 봄 부팅 백엔드에 추가로 값을 보낼 곳

내 프론트 엔드에 대한 각도 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는 더하기 기호입니다. 그리고 덧글에 더 많은 것을 추가하려면, 공백에 대한 URL 이스케이프로 처리됩니다. 몇 가지 방법 중 하나. URL을 살펴보고 더 자세히 인코딩하십시오. – Quintium

답변

1

나는 그것을 해결했다.

내가 앞머리에 그것을 인코딩했습니다. 다른 옵션은 없었습니다.

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

도움을 주셔서 감사합니다.

+0

을 참조하십시오. 프런트 엔드가 * all * 필드를 URI 인코딩해야합니다. 개별적으로 코딩하거나 프레임 워크가 프레임을 처리하도록 보장하십시오. 그렇지 않으면 사용자는 놀라움을 얻습니다. 텍스트 필드에'&'를 넣으면. – slim

+1

제대로 보이지 않습니다. https://angular.io/docs/ts/latest/api/http/index/URLSearchParams-class.html에 이미 인코딩이 기본적으로 수행되고 있다고 나와 있습니다. 그래서 분명히 뭔가 다른 일을하고 있습니다 - 서버 쪽에서 두 번 또는 뭔가를 해독 할 수 있습니다. 원시 트래픽을보고 "+"또는 ""이있는 위치를 찾으십시오. – kan

+0

@slim 조언을 주셔서 감사합니다. – trap