记录在 SpringBoot 中 @CrossOrigin 注解不生效问题
昨天在项目前后端联调时遇到了跨域问题,于是就在 Controller 类上加上了 @CrossOrigin 注解。加上之后,除了 GET 请求之外,其他请求依然有跨域问题,特此记录一下,也避免大家踩坑。
这是我 Controller 类的代码:
@RestController
@RequestMapping("/admin/hospitalSet")
@CrossOrigin
public class HospitalSetController {
@Autowired
public HospitalSetService hospitalSetService;
@RequestMapping(value = "/delete/{id}")
public Result<Boolean> delete(@PathVariable("id")int id){
if (hospitalSetService.removeById(id)){
return Result.ok();
}else {
return Result.no("删除失败,请重试。");
}
}
@RequestMapping("/getPage")
public Result getPage(@RequestParam(defaultValue = "1")int index, @RequestParam(defaultValue = "10")int count, HospitalSetQueryVo queryVo){
Page<HospitalSet> page = new Page<>();
page.setCurrent(index);
page.setSize(count);
QueryWrapper<HospitalSet> wrapper = new QueryWrapper<>();
if (queryVo.getHosname() !=null && queryVo.getHosname().length() > 0) {
wrapper.like("hosname",queryVo.getHosname());
}
if (queryVo.getHoscode() != null && queryVo.getHoscode().length() > 0) {
wrapper.eq("hoscode",queryVo.getHoscode());
}
Page<HospitalSet> page1 = hospitalSetService.page(page, wrapper);
return Result.ok(page1);
}
@RequestMapping("/add")
public Result add(HospitalSet hospital){
hospital.setIsDeleted(0);
hospital.setStatus(1);
Random rd = new Random();
hospital.setSignKey(MD5.encrypt(System.currentTimeMillis() + "" + rd.nextInt(1000)));
boolean save = hospitalSetService.save(hospital);
if (save){
return Result.ok();
}else {
return Result.no("保存失败!");
}
}
@RequestMapping("/update")
public Result update(HospitalSet hospital){
boolean b = hospitalSetService.updateById(hospital);
if (b){
return Result.ok();
}else {
return Result.no("修改失败!");
}
}
}
所有的方法全部都是只能用 GET 方式可以正常访问,其他方式全部会出现跨域问题
于是在查阅大量资料后得知,出现这种问题是因为我没有明确的指定方法访问的具体方式或允许跨域的请求方式。
解决方法也很简单:
一、在 @RequestMapping 中使用 method 指定具体的请求方式或 @GetMapping、@PostMapping 这样的明确请求方式的注解
@RequestMapping(value = "/delete/{id}",method = RequestMethod.DELETE)
public Result<Boolean> delete(@PathVariable("id")int id){
if (hospitalSetService.removeById(id)){
return Result.ok();
}else {
return Result.no("删除失败,请重试。");
}
}
@PostMapping("/add")
public Result add(HospitalSet hospital){
hospital.setIsDeleted(0);
hospital.setStatus(1);
Random rd = new Random();
hospital.setSignKey(MD5.encrypt(System.currentTimeMillis() + "" + rd.nextInt(1000)));
boolean save = hospitalSetService.save(hospital);
if (save){
return Result.ok();
}else {
return Result.no("保存失败!");
}
}
二、在 @CrossOrigin 注解中用 methods 中指定允许跨域的请求方式
@RestController
@RequestMapping("/admin/hospitalSet")
@CrossOrigin(methods = {RequestMethod.DELETE,RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT})
public class HospitalSetController {
......
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具