通过 angularjs $http.get 在 spring mvc 中发送 HashMap
sending HashMap by angularjs $http.get in spring mvc
我想通过angularjs 发送和检索HashMap 并在springmvc 控制器中接收它。我已成功发送和接收 List 但无法发送 HashMap。
我的代码是。
$scope.addskill = function(skills){
// $scope.list = [];
// $scope.list.push(skills.skillName, skills.expMonth, skills.expYear, skills.experties);
var map = {};
map['name'] = skills.skillName;
map['month'] = skills.expMonth;
map['year'] = skills.expYear;
map['experties'] = skills.experties;
alert(map['name']);
var response = $http.get('/JobSearch/user/addskill/?map=' +map);
// var response = $http.get('/JobSearch/user/addskill/?list=' +$scope.list);
response.success(function(data, status, headers, config){
$scope.skills = null;
$timeout($scope.refreshskill,1000);
});
response.error(function(data, status, headers, config) {
alert( "Exception details: " + JSON.stringify({data: data}));
});
};
我的 mvc 控制器是:
@RequestMapping(value = "/addskill", method = RequestMethod.GET)
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void addStudentSkill(@RequestBody HashMap<String,String> map){
System.out.println(map.get("name"));
/*
* public void addStudentSkill(@RequestParam("list") List list){
try{
StudentSkills skills = new StudentSkills();
skills.setSkillName(list[0]);
skills.setExpMonth(Integer.parseInt(list[1]));
skills.setExpYear(Integer.parseInt(list[2]));
skills.setExperties(list[3]);
skills.setStudent(studentService.getStudent(getStudentName()));
studentService.addStudentSkill(skills);
}catch(Exception e){};
*/
}
注释代码在我发送和接收列表时有效。我想使用密钥来检索数据。如果有更好的方法请指教
错误是无法将java.lang.string转换为hashmap
您正在将地图作为请求参数发送。你正试图在请求正文中阅读它。那是不可能的。而且 GET 请求无论如何都没有正文。
以下是您应该如何操作:
var parameters = {};
parameters.name = skills.skillName;
parameters.month = skills.expMonth;
parameters.year = skills.expYear;
parameters.experties = skills.experties;
var promise = $http.get('/JobSearch/user/addskill', {
params: parameters
});
并且在 Spring 控制器中:
@RequestMapping(value = "/addskill", method = RequestMethod.GET)
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void addStudentSkill(@RequestParam("name") String name,
@RequestParam("name") String month,
@RequestParam("name") String year,
@RequestParam("name") String experties) {
...
}
就是说,鉴于方法的名称 addStudentSkill
,以及它没有 return 任何东西的事实,似乎此方法不用于从服务器获取数据,但是而不是在服务器上创建数据。所以这个方法应该映射到一个POST请求,数据应该作为正文发送:
var data = {};
data.name = skills.skillName;
data.month = skills.expMonth;
data.year = skills.expYear;
data.experties = skills.experties;
var promise = $http.post('/JobSearch/user/addskill', params);
在控制器中:
@RequestMapping(value = "/addskill", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.CREATED)
public void addStudentSkill(@RequestBody Map<String, String> data) {
...
}
我想通过angularjs 发送和检索HashMap 并在springmvc 控制器中接收它。我已成功发送和接收 List 但无法发送 HashMap。 我的代码是。
$scope.addskill = function(skills){
// $scope.list = [];
// $scope.list.push(skills.skillName, skills.expMonth, skills.expYear, skills.experties);
var map = {};
map['name'] = skills.skillName;
map['month'] = skills.expMonth;
map['year'] = skills.expYear;
map['experties'] = skills.experties;
alert(map['name']);
var response = $http.get('/JobSearch/user/addskill/?map=' +map);
// var response = $http.get('/JobSearch/user/addskill/?list=' +$scope.list);
response.success(function(data, status, headers, config){
$scope.skills = null;
$timeout($scope.refreshskill,1000);
});
response.error(function(data, status, headers, config) {
alert( "Exception details: " + JSON.stringify({data: data}));
});
};
我的 mvc 控制器是:
@RequestMapping(value = "/addskill", method = RequestMethod.GET)
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void addStudentSkill(@RequestBody HashMap<String,String> map){
System.out.println(map.get("name"));
/*
* public void addStudentSkill(@RequestParam("list") List list){
try{
StudentSkills skills = new StudentSkills();
skills.setSkillName(list[0]);
skills.setExpMonth(Integer.parseInt(list[1]));
skills.setExpYear(Integer.parseInt(list[2]));
skills.setExperties(list[3]);
skills.setStudent(studentService.getStudent(getStudentName()));
studentService.addStudentSkill(skills);
}catch(Exception e){};
*/
}
注释代码在我发送和接收列表时有效。我想使用密钥来检索数据。如果有更好的方法请指教
错误是无法将java.lang.string转换为hashmap
您正在将地图作为请求参数发送。你正试图在请求正文中阅读它。那是不可能的。而且 GET 请求无论如何都没有正文。
以下是您应该如何操作:
var parameters = {};
parameters.name = skills.skillName;
parameters.month = skills.expMonth;
parameters.year = skills.expYear;
parameters.experties = skills.experties;
var promise = $http.get('/JobSearch/user/addskill', {
params: parameters
});
并且在 Spring 控制器中:
@RequestMapping(value = "/addskill", method = RequestMethod.GET)
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void addStudentSkill(@RequestParam("name") String name,
@RequestParam("name") String month,
@RequestParam("name") String year,
@RequestParam("name") String experties) {
...
}
就是说,鉴于方法的名称 addStudentSkill
,以及它没有 return 任何东西的事实,似乎此方法不用于从服务器获取数据,但是而不是在服务器上创建数据。所以这个方法应该映射到一个POST请求,数据应该作为正文发送:
var data = {};
data.name = skills.skillName;
data.month = skills.expMonth;
data.year = skills.expYear;
data.experties = skills.experties;
var promise = $http.post('/JobSearch/user/addskill', params);
在控制器中:
@RequestMapping(value = "/addskill", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.CREATED)
public void addStudentSkill(@RequestBody Map<String, String> data) {
...
}