Spring Boot POST请求遭CORS策略拦截,寻求解决方案
解决Spring Boot + Vue跨域CORS问题的方案
先排查两个直接的错误点
1. 请求路径不匹配
你的OrderController中POST接口的映射是@PostMapping("/saveOrder")(驼峰大写O),但Vue代码里请求的URL是http://localhost:8080/api/saveorder/(全小写+末尾多了斜杠)。路径不匹配会导致请求无法命中带@CrossOrigin注解的接口方法,自然不会返回CORS响应头,引发报错。
修正:
把Vue中的POST请求URL改成:
const response = await axios.post('http://localhost:8080/api/saveOrder', requestData)
(去掉末尾斜杠,保持和Controller一致的驼峰写法)
2. @CrossOrigin注解的Origin格式错误
你在Controller上写的@CrossOrigin("http://localhost:5173/")带了末尾斜杠,但实际请求的Origin是http://localhost:5173(没有斜杠),这会导致Origin匹配失败,CORS头不生效。
修正:
把注解改成:
@CrossOrigin("http://localhost:5173")
如果上述修正后仍有问题,使用全局CORS配置
有时候局部@CrossOrigin注解在处理预检OPTIONS请求时可能存在兼容性问题,建议添加全局CORS配置类,覆盖所有/api路径的请求:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") // 匹配所有/api下的路径 .allowedOrigins("http://localhost:5173") // 允许的前端域名 .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的HTTP方法 .allowedHeaders("*") // 允许所有请求头 .allowCredentials(true); // 允许携带Cookie(如果需要的话) } }; } }
添加这个配置类后,可以暂时去掉Controller上的@CrossOrigin注解,避免冲突。
额外注意点
- 确认你的Order实体类中存在
firstName、lastName、itemId这些属性,并且有对应的getter/setter,否则@RequestBody无法正确解析请求参数,也可能间接导致CORS相关的报错。 - Postman测试不触发CORS检查是因为它不是浏览器环境,只有浏览器会严格执行同源策略。
内容的提问来源于stack exchange,提问作者Kova981
相关产品推荐
相关产品推荐

