我无法找到使用angularjs' s $ http.get传递过滤器参数的方法。
网址是:
http://localhost:8080/template/users/query;username=abcd;firstName=ding...
RestController是:
@RequestMapping(value={"/users/{query}"}, method=RequestMethod.GET)
public ResponseEntity<List<User>> queryUsers(@MatrixVariable(pathVar="query") Map<String, List<String>> filters) {
....
}
当我在浏览器中直接使用上面的Url时,它运行正常。但是,当我尝试使用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 :(得分: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
});