【问题标题】:pass data from angularjs controller to spring controller将数据从 angularjs 控制器传递到 spring 控制器
【发布时间】:2015-09-03 06:39:56
【问题描述】:

我必须将两个字符串数据从 angularjs 控制器传递到 spring 控制器。除了json还有其他方法吗?我不知道如何在 spring 控制器中接受 json 对象。

controller.js

$scope.cloneRelease = function(release,newReleaseName){
            var dataObj = {
            oldReleaseName : $scope.release,
            newReleaseName : $scope.newReleaseName,
        };
        console.log('inside clone release'+dataObj);
        $http.post('cloneReleaseController/cloneRelease',dataObj).success(function (data) {   
        }); 
        }

Spring controller

public void cloneRelease(String oldReleaseName ,String newReleaseName, @RequestBody ReleaseDAO releaseDAO){
        System.out.println("inside clone controller"+oldReleaseName+" "+newReleaseName);
        ArrayList<TaskDAO> tasks;
        ArrayList<TaskDAO> task = new ArrayList<TaskDAO>();
        if(mongoService.createReleaseService(releaseDAO) != null){
            String releaseIdOfNewRelease = releaseDAO.getId();
            String releaseNameOfNewRelease = releaseDAO.getName();
            tasks = mongoService.fetchTaskForReleaseService(oldReleaseName);
                for(TaskDAO fetchSingleTask : tasks){
                    fetchSingleTask.getRelease().setId(releaseIdOfNewRelease);
                    fetchSingleTask.getRelease().setName(releaseIdOfNewRelease);
                }
                mongoService.addTask(tasks, null);
        }

    }

【问题讨论】:

  • passing JSON data to a Spring MVC controller。您的角度代码看起来不错,但您的弹簧控制器需要看起来像这样:public void cloneRelease(@RequestBody SomePojo dataObj) 或者如果您懒得定义 POJO,那么 public void cloneRelease(@RequestBody Map&lt;String, Object&gt; dataObj)

标签: angularjs spring-mvc


【解决方案1】:

$scope.cloneRelease 内的 controller.js 中,client side 中有 json 对象 dataObj,只需将下面的代码放在 服务器端 中, HttpServletRequest 作为

客户端

 $http({method: 'POST', url: 'cloneReleaseController/cloneRelease', params:{str:dataObj}}).
                    success(function(data, status, headers, config) {
                        console.log("data.token " + data.token);
                            }).
                    error(function(data, status, headers, config) {
                        console.log("data.token " + data.token);
                        });

服务器端: String json = request.getParameter("str");

【讨论】:

    【解决方案2】:

    如果没有更多代码,我无法完全确定发生了什么,但根据您所展示的内容,我注意到两件事: 虽然不是绝对必要的,但您应该声明控制器方法接受 JSON 数据:

    @RequestMapping(consumes=MediaType.APPLICATION_JSON_VALUE)
    

    此外,您的 java 对象需要匹配传入的 JSON 对象,或者被注释以忽略您不打算发送到控制器的字段。您正在传递一个带有属性 oldReleaseName 和 newReleaseName 的 JSON 对象,但在 java 端,我不知道您的 ReleaseDao 类在做什么。您可能需要在类上使用 @JsonIgnoreProperties(ignoreUnknown = true) 对其进行注释,这样它就不会因缺少属性而感到害怕。

    就控制器中的方法签名而言,我不确定是否会调用它,因为您没有告诉它字符串参数的来源,而且它们不是通常会自动注入的对象(像请求或模型)。如果您将签名缩减到以下内容,您应该会有更好的运气。

    public void cloneRelease(@RequestBody ReleaseDAO releaseDAO)
    

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 2019-05-13
      • 2017-03-16
      • 2017-03-06
      • 2017-04-18
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多