angularjs - 在 spring mvc 中通过 angularjs $http.get 发送 HashMap

标签 angularjs spring-mvc hashmap

我想通过 angularjs 发送和检索 HashMap 并在 springmvc Controller 中接收它。我已成功发送和接收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 Controller 是:

@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){};

*/
}

注释代码在我发送和接收列表时有效。我想使用 key 来检索数据。如果有更好的方法请提出。

错误是无法将 java.lang.string 转换为 hashmap

最佳答案

您将 map 作为请求参数发送。并且您尝试在请求正文中读取它。这不可能行得通。而且 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 Controller 中:

@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,以及它不返回任何内容的事实,看来该方法不是用于从服务器获取数据,而是用于创建服务器上的数据。所以这个方法应该映射到 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);

在 Controller 中:

@RequestMapping(value = "/addskill", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.CREATED)
public void addStudentSkill(@RequestBody Map<String, String> data) {
    ...
}

关于angularjs - 在 spring mvc 中通过 angularjs $http.get 发送 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060493/

相关文章:

routing - AngularJS + Base Href 区分大小写?

java - 如何将 Spring MVC View 呈现为字符串

java - 为什么 Android Studio 在 Reformatting the code 上导入完整包

java - 为什么我的 HashMap 将元素放在位置 6 而不是下一个空位置?

java - 在单选按钮上渲染列表选择设计

java - Map of maps - 如何将内部 map 保留为 map ?

javascript - 如何访问我的 Controller 中的 AngularJS ui-bootstrap datepicker 值

javascript - 在 Meteor 中启用跨源资源共享?

javascript - 如何通过自动完成在 Angular 谷歌地图上放置标记?

java - 为可信空间定制 Spring Security