首页 > 解决方案 > AngularJS $http POST 在 Java 控制器后端作为空变量接收

问题描述

我希望从 AngularJS 发送数据,以便稍后在 Python+Java 后端使用它。问题是它被发送为空,我不知道为什么。谷歌浏览器的控制台没有错误,但我可以在我的 java 服务器控制台(mvn -P dev)中看到问题,我使用 return 来查看到达时变量的值是什么:

调试 13496 --- [XNIO-23 task-27] acpsaop.logging.LoggingAspect:退出:us.com.generic.web.rest.DataController.getData() 结果 = 变量“null”已保存

Java 控制器,从 AngularJS 获取信息:

@RestController
@RequestMapping("/api")
public class DataController {

    @RequestMapping("/data/")
    @ResponseStatus(code = HttpStatus.OK)
    public @ResponseBody String getData( @RequestParam(name="dataVariable", required=false) String dataVariable) {      

        return "The variable '" + dataVariable + "' was saved";
    }
}

AngularJS 控制器:

angular
    .module('Generic')
    .controller('DataController', DataController);

    DataController.$inject = ['$scope', '$http', 'URI', '$timeout'];

    function DataController ($scope, $http, URI, $timeout) {

        var myInformation = 'HeadStreet';       

        $http.post(URI + 'api/data/', {
            dataVariable: myInformation
        }, {
                withCredentials: true,
                headers: {
                    'Content-Type': 'charset=utf-8'
                }
            }).then(Success, Error);
        }

        function Success() {
           alert('Variable sent');
        }

        function Error() {
           alert('Issue while sending data');
        }
  }

标签: javascriptjavaangularjs

解决方案


您将 dataVariable 作为 json 发布在请求的正文中。@RequestParam 从查询参数中读取。

如果你想在正文中发布数据,你应该使用@RequestBody

你需要像下面这样创建一个 POJO 类

public class GetDataRequest{
   public String dataVariable;
}

然后在你的控制器中

@RequestMapping("/data/")
@ResponseStatus(code = HttpStatus.OK)
public @ResponseBody String getData( @RequestBody GetDataRequest request) {      

    return "The variable '" + request.dataVariable + "' was saved";
}

这应该工作


推荐阅读