使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]
Posted
技术标签:
【中文标题】使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]【英文标题】:still getting CORS error after configuring Spring with CorsRegistry/@CrossOrigin [closed] 【发布时间】:2019-04-29 20:51:39 【问题描述】:使用 CorsRegistry 配置/@CrossOrigin 配置 Spring 后端,发送 XMLHttpRequest 时我仍然收到 CORS 错误。
注意,这仅在我发送 DELETE 请求时发生。对于 GET 和 POST,它似乎工作正常..
@RestController
@RequestMapping(path="abouts",
produces="application/json",
consumes="application/json")
@CrossOrigin(origins="*")
public class AboutController
private AboutRepository aboutRepo;
public AboutController(AboutRepository aboutRepo)
this.aboutRepo = aboutRepo;
@GetMapping
public Iterable<About> getAbouts()
return aboutRepo.findAll();
@GetMapping("/aboutId")
public ResponseEntity<About> aboutById(@PathVariable("aboutId") Long id)
Optional<About> optAbout = aboutRepo.findById(id);
if (optAbout.isPresent())
return new ResponseEntity<>(optAbout.get(), HttpStatus.OK);
return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public About postAbout(@RequestBody About about)
return aboutRepo.save(about);
@PutMapping("/aboutId")
public About putAbout(@RequestBody About about)
return aboutRepo.save(about);
@DeleteMapping("/aboutId")
@ResponseStatus(code = HttpStatus.NO_CONTENT)
public void deleteEvent (@PathVariable("aboutId") Long aboutId)
try
aboutRepo.deleteById(aboutId);
catch (EmptyResultDataAccessException e)
JS
function deleteAbout (e)
let id = e.target.getAttribute("id").slice(5);
let xhr = new XMLHttpRequest();
xhr.onload = () =>
getAbouts();
xhr.open("DELETE","http://localhost:8080/abouts/" + id);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader('Access-Control-Allow-Headers', '*');
xhr.send();
window.addEventListener("load", getAbouts);
【问题讨论】:
首先从您的前端 javascript 代码中删除xhr.setRequestHeader("Content-Type", "application/json")
和 xhr.setRequestHeader('Access-Control-Allow-Headers', '*')
。您正在执行 DELETE 请求,而不是发送任何请求正文,因此为请求设置 Content-Type 是没有意义的。并且 Access-Control-Allow-Headers 标头是响应标头,而不是请求标头。为请求设置它只会导致事情进一步恶化。
找到了,谢谢..
还需要 JSON 标头,因为控制器上的消耗 anno,似乎是糟糕的设计,但哦,atm。删除了 ACAH 标题,谢谢
【参考方案1】:
语法错误..删除方法上缺少 ,弹簧控制器...对不起,伙计们
我修好后工作
【讨论】:
这就是它不起作用的原因以上是关于使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)