Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS$http POST在Java控制器后端作为空变量接收_Javascript_Java_Angularjs - Fatal编程技术网

Javascript AngularJS$http POST在Java控制器后端作为空变量接收

Javascript AngularJS$http POST在Java控制器后端作为空变量接收,javascript,java,angularjs,Javascript,Java,Angularjs,我希望从AngularJS发送数据,以便稍后在Python+Java后端使用它。问题是它被发送为null,我不知道为什么。google chrome的控制台上没有错误,但我可以在java服务器控制台mvn-P dev中看到问题,在这里我使用return查看变量到达时的值: 调试13496-[XNIO-23 task-27]a.c.p.s.aop.logging.LoggingAspect:退出:us.com.generic.web.rest.DataController.getData,结果=变

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

调试13496-[XNIO-23 task-27]a.c.p.s.aop.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');
        }
  }

您正在请求主体中以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";
}
如果您在控制器中使用RequestParam,但您在POST请求的正文中发送数据,那么这应该会起作用

RequestParam用于URL中的一个参数,例如/api/data?dataVariable=HeadStreet,但您需要使用@RequestBody读取消息体,如下所示

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

    @RequestMapping("/data/")
    @ResponseStatus(code = HttpStatus.OK)
    public @ResponseBody String getData(@RequestBody YourDTO yourDTO) String dataVariable) {      

        return "The variable '" + yourDTO.dataVariable + "' was saved";
    }
}
以及相应的数据传输对象类

class YourDTO {
    public String dataVariable;
}

我对Spring一无所知,但似乎您的代码读取的是GET-params,而不是POST-params。作为快速检查,请尝试使用URI+“api/data/?dataVariable=HeadStreet”快速查明这是否是问题所在。您还可以在浏览器控制台中检查您的请求发送的客户端btw