You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AJAX调用SpringBoot控制器遭遇CORS错误,求解决方案

解决AJAX调用SpringBoot控制器的CORS错误及请求不匹配问题

首先,你遇到的CORS错误加上请求失败,其实是几个小问题凑到一起了,我帮你一步步拆解并修复:

错误根源分析

  1. 请求方法不匹配:你的JavaScript里用的是GET请求,但SpringBoot控制器上标注的是@PostMapping("/print"),两者完全不对应,这会导致服务器无法正确处理请求,进而引发CORS预请求失败。
  2. 错误设置请求头:你在AJAX里加了headers: { 'Access-Control-Allow-Origin': '*' },但这个头是服务器返回给客户端的响应头,不是客户端发给服务器的请求头,加在这里完全没用,反而可能干扰请求逻辑。
  3. GET请求的参数传递错误:即使你想用GET请求,JSON.stringify(data)也不是GET请求传递参数的正确方式——GET参数应该是URL拼接的键值对,而非JSON格式的请求体。

具体修复步骤

  • 修正请求方法:把AJAX里的type: "GET"改成type: "POST",和控制器的@PostMapping保持一致。
  • 移除错误的请求头:删掉AJAX配置里的headers那一行。
  • 确保参数传递正确:因为控制器用了@RequestBody,所以POST请求里用JSON.stringify(data)传递JSON体是正确的,同时保持contentType: "application/json"不变。

修改后的代码示例

调整后的JavaScript代码

database.on('child_added', function (snapshot) { 
    var data = {}; 
    data["CaptainName"] = snapshot.val().CaptainName; 
    data["CookName"] = snapshot.val().CookName; 
    data["LogicalConditions"] = snapshot.val().LogicalConditions; 
    $.ajax({ 
        type: "POST", // 改成POST请求,匹配控制器注解
        contentType: "application/json", 
        url:"my-localhost/application/print", 
        data: JSON.stringify(data), 
        dataType: 'json', 
        cache: false, 
        success: function(){ 
            console.log("Successfully sent payload") 
        }, 
        error: function(e){ 
            console.log("Error:" , e) 
        } 
    });
});

控制器代码(现有配置已正确,无需修改)

@CrossOrigin(origins = "*", allowedHeaders = "*") 
@RestController 
@RequestMapping("/application") 
public class AppController { 
    @PostMapping("/print") 
    public void print(@RequestBody String st) { 
        System.out.println(st); 
    } 
}

额外优化建议

如果之后多个接口都需要处理CORS问题,可以考虑在SpringBoot里配置全局CORS过滤器,这样不用每个控制器都加@CrossOrigin注解,示例代码如下:

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

内容的提问来源于stack exchange,提问作者Vai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:32:41