【问题标题】:still getting CORS error after configuring Spring with CorsRegistry/@CrossOrigin [closed]使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]
【发布时间】: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 标题,谢谢

标签: spring rest http spring-boot cors


【解决方案1】:

语法错误..删除方法上缺少 },弹簧控制器...对不起,伙计们

我修好后工作

【讨论】:

  • 这就是它不起作用的原因
猜你喜欢
  • 2020-05-25
  • 2021-09-21
  • 2020-06-22
  • 1970-01-01
  • 2016-03-21
  • 2021-03-01
  • 2023-01-12
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多