Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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
Ajax javascript映射到Spring控制器_Javascript_Ajax_Spring - Fatal编程技术网

Ajax javascript映射到Spring控制器

Ajax javascript映射到Spring控制器,javascript,ajax,spring,Javascript,Ajax,Spring,我正在尝试将ajax Javascript映射到spring控制器。但它在后端变为空。如果我重复这个问题,请原谅 我不能更改Map类型,因为我的整个前端逻辑都在上面。因为set,get和具有Map中的方法是我所需要的 弹簧代码 @RequestMapping (value="myUrl", method=RequestMethod.POST) public @ResponseBody String saveData(@RequestParam(required = false, valu

我正在尝试将ajax Javascript
映射到spring控制器。但它在后端变为空。如果我重复这个问题,请原谅

  • 我不能更改
    Map
    类型,因为我的整个前端逻辑都在上面。因为
    set
    get
    具有
    Map
    中的
    方法是我所需要的
  • 弹簧代码

    @RequestMapping (value="myUrl", method=RequestMethod.POST)
        public @ResponseBody String saveData(@RequestParam(required = false, value = "mapData") Map<String,List<String>> mapData, Model map)
        {
            log.info("Call Success");
            log.info("mapData: "+mapData);
    
    @RequestMapping(value=“myUrl”,method=RequestMethod.POST)
    public@ResponseBody字符串saveData(@RequestParam(required=false,value=“mapData”)映射映射数据,模型映射)
    {
    log.info(“呼叫成功”);
    log.info(“mapData:+mapData”);
    

    请建议需要在此处执行的操作。

    您实际上可以发送地图,而无需更改值

    var ansMap = new Map(); // This way i created object
    
    // added many values in ansMap,
    
    $.ajax({
            type: "POST",
            url: myUrl,
            contentType : 'application/json',
            //cache: false,
            dataType : 'json',
            data : JSON.stringify(Object.fromEntries(ansMap)), // can't JSON.stringy(ansMap) as it gives empty json
            success: function(result) {
                console.log(result);
            },
    
    这将把它变成一个javascript对象

    Object.fromEntries将把映射转换为javascript对象,而不改变原始的
    Map

    关于您的后端,我认为您误解了@RequestParam注释 @RequestParam用于从请求中提取查询参数、表单参数甚至文件

    我想你要找的是@RequestBody。 这意味着您将寻找类似于:

    @RequestMapping(value="/myUrl",method = RequestMethod.POST) 
        public String saveData( @RequestBody Map<String,Object> body) {
    
    @RequestMapping(value=“/myUrl”,method=RequestMethod.POST)
    公共字符串saveData(@RequestBody映射体){
    
    您实际上可以发送地图,而无需更改值

    var ansMap = new Map(); // This way i created object
    
    // added many values in ansMap,
    
    $.ajax({
            type: "POST",
            url: myUrl,
            contentType : 'application/json',
            //cache: false,
            dataType : 'json',
            data : JSON.stringify(Object.fromEntries(ansMap)), // can't JSON.stringy(ansMap) as it gives empty json
            success: function(result) {
                console.log(result);
            },
    
    这将把它变成一个javascript对象

    Object.fromEntries将把映射转换为javascript对象,而不改变原始的
    Map

    关于您的后端,我认为您误解了@RequestParam注释 @RequestParam用于从请求中提取查询参数、表单参数甚至文件

    我想你要找的是@RequestBody。 这意味着您将寻找类似于:

    @RequestMapping(value="/myUrl",method = RequestMethod.POST) 
        public String saveData( @RequestBody Map<String,Object> body) {
    
    @RequestMapping(value=“/myUrl”,method=RequestMethod.POST)
    公共字符串saveData(@RequestBody映射体){
    
    这应该行得通

    页面

    post
    $(函数(){
    var map=newmap();
    地图集('CIQ_2','aa');
    地图集('CIQ_3','78965412300');
    控制台日志(map);
    $(“#doPost”)。单击(函数(){
    变量设置={
    beforeSend:函数(xhr,选项){
    setRequestHeader(“内容类型”,“应用程序/json;字符集=utf-8”);
    },
    键入:“POST”,
    url:“/post”,
    数据:JSON.stringify(Object.fromEntries(map))
    }
    $.ajax(设置).done(函数(结果){
    console.log(“完成:+结果”);
    });
    });
    });
    
    控制器

        @PostMapping("/post")
        @ResponseBody
        public String post(@RequestBody Map<String,String> data) {
            System.out.println(data);
            return "data well received";
        }
    
    @PostMapping(“/post”)
    @应答器
    公共字符串post(@RequestBody映射数据){
    系统输出打印项次(数据);
    返回“数据接收良好”;
    }
    
    将打印
    {CIQ_2=aa,CIQ_3=78965412300}

    工作代码在

    这应该可以工作

    页面

    post
    $(函数(){
    var map=newmap();
    地图集('CIQ_2','aa');
    地图集('CIQ_3','78965412300');
    控制台日志(map);
    $(“#doPost”)。单击(函数(){
    变量设置={
    beforeSend:函数(xhr,选项){
    setRequestHeader(“内容类型”,“应用程序/json;字符集=utf-8”);
    },
    键入:“POST”,
    url:“/post”,
    数据:JSON.stringify(Object.fromEntries(map))
    }
    $.ajax(设置).done(函数(结果){
    console.log(“完成:+结果”);
    });
    });
    });
    
    控制器

        @PostMapping("/post")
        @ResponseBody
        public String post(@RequestBody Map<String,String> data) {
            System.out.println(data);
            return "data well received";
        }
    
    @PostMapping(“/post”)
    @应答器
    公共字符串post(@RequestBody映射数据){
    系统输出打印项次(数据);
    返回“数据接收良好”;
    }
    
    将打印
    {CIQ_2=aa,CIQ_3=78965412300}


    上工作的代码我在后端得到了
    null
    ,我是否也需要更改以修改我的java文件?更新java后不允许得到
    方法
    ,而且我没有此请求的pojo,这是简单的键值对您的“pojo”您的
    myUrl
    变量设置为正确的url时所使用的映射是否正确。您可以添加此
    consumes={“application/json”}
    到您的RequestMapping注释更具体地说是的,它是正确的url。它是公司url。因此我没有在这里透露。不允许使用相同的错误
    方法
    。我也尝试其他方法。basic@RequestBody和java.util.Map应该可以工作。不允许使用方法可能是因为很多事情。其中一个是需要的东西在后端没有得到
    null
    ,我也需要修改我的java文件吗?更新java后不允许得到
    方法
    ,而且我没有这个请求的pojo,这是简单的键值对“pojo”您的
    myUrl
    变量设置为正确的url时所使用的映射是否正确。您可以添加此
    consumes={“application/json”}
    到您的RequestMapping注释更具体地说是的,它是正确的url。它是公司url。因此我没有在这里透露。不允许使用相同的错误
    方法
    。我也尝试其他方法。basic@RequestBody和java.util.Map应该可以工作。不允许使用方法可能是因为很多事情。其中一个是不符合要求的东西