2016-09-14 64 views
0

我無法找到使用angularjs的$ http.get來傳遞過濾參數的方法。如何使用@MatrixVariable將angularjs的過濾參數傳遞給spring restcontroller

鏈接:

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

RestController是:

@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(... 

OR

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

我修改,你提到的代碼,但還是同樣的問題。 –

+0

我看到錯誤異常:TypeError:'調用者'和'參數'是受限制的函數屬性,無法在此上下文中訪問。在Chrome開發工具中的Function.remoteFunction(:3:14)] –

+0

這看起來像Angularjs放置的URL的問題?和當使用params時。但預計春季控制器的MatrixVariable;和,。矩陣變量不起作用?和&。截至目前,我不知道如何告訴Angularjs通過;並在URL中。如果有人知道,請讓我知道。 –

相關問題