2016-09-14 1 views
0

angularjs의 $ http.get을 사용하여 필터 매개 변수를 전달하는 방법을 찾을 수 없습니다.@MatrixVariable을 사용하여 angularjs에서 spring restcontroller로 필터 매개 변수를 전달하는 방법

URL은 다음과 같습니다

http://localhost:8080/template/users/query;username=abcd;firstName=ding... 

RestController입니다 : 내가 브라우저에서 직접 위의 URL을 사용하는 경우는 잘 작동

@RequestMapping(value={"https://stackoverflow.com/users/{query}"}, method=RequestMethod.GET) 
public ResponseEntity<List<User>> queryUsers(@MatrixVariable(pathVar="query") Map<String, List<String>> filters) { 
    .... 
} 

. 그러나 Angularjs의 $ http.get을 사용하여 같은 것을 호출하려고하면 작동하지 않습니다.

AngularJS와 코드 :

this.searchUser = function() { 
     var queryStr = ''; 
     for (var key in userObj.search) { 
      if (userObj.search[key]) { 
       queryStr += ";" + key + "=" + userObj.search[key]; 
      } 
     } 
     console.log('Url ', 'users/query' + queryStr); 
     if (queryStr === "") { 
      alert("No filters specified"); 
      return false; 
     } 
     $http.get('users/query', angular.toJson(userObj.search)).then(function successCallback(response) { 
      if (response.data.errorCode) { 
       console.log(response); 
       alert(response.data.message); 
      } else { 
       console.log('Successfully queried for users ', response.data); 
       userObj.users = response.data; 
      } 
     }, function errorCallback(response) { 
      console.log('Error ', response); 
      alert(response.statusText); 
     }); 
    }; 

나는이 메서드를 호출 할 때 : 내가 오류

errorCode: 400 
message: "Failed to convert value of type [java.lang.String] to required type [long]; nested exception is java.lang.NumberFormatException: For input string: "query"" 

심지어 내가, 그것은 위의 URL에서 언급 한대로 쿼리 문자열을 전달하려고 노력으로하지만, 여전히 같은 오류. RestController 메서드 안에 들어가는 것도 아닙니다.

해결 방법?

답변

0

get을 사용하면 JSON을 전달할 수 없습니다.

쿼리 문자열을 전달하려면 개체를 준비해야합니다.

var queryStr = {}; 
for (var key in userObj.search) { 
    if (userObj.search[key]) { 
     queryStr[key] = userObj.search[key]; 
    } 
} 

그리고 당신의 HTTP#GET 호출은 다음과 같이해야합니다 :

$http.get('users/query', {params: queryStr}).then(... 

또는

$http({ 
    url: 'users/query', 
    method: "GET", 
    params: queryStr 
}); 
+0

난 당신이 언급 한 바와 같이 코드를 수정,하지만 여전히 같은 문제. –

+0

예외 : TypeError : '호출자'및 '인수'는 제한된 함수 속성이므로이 컨텍스트에서 액세스 할 수 없습니다. at Function.remoteFunction ( : 3 : 14)] Chrome 개발자 도구 –

+0

Angularjs가 사용하는 URL에 문제가있는 것 같습니다. & params가 사용될 때. 그러나 스프링 컨트롤러의 MatrixVariable을 사용하면 예상 할 수 있습니다. 및. 행렬 변수가 작동하지 않습니까? 및 &. 현재로서는 Angularjs에게 전달하는 방법을 알 수 없습니다. 및 URL에. 아무도 모른다면 알려주세요. –