【发布时间】:2017-10-19 10:55:50
【问题描述】:
Spring @CrossOrigin 注解不适用于 DELETE 方法。
示例代码(在 Groovy 中):
@CrossOrigin
@RestController
@RequestMapping('/rest')
class SpringController {
@RequestMapping(value = '/{fileName}', RequestMethod.DELETE)
void deleteFile(@PathVariable fileName) {
// logic
}
}
对于这段代码,我得到了异常:
XMLHttpRequest 无法加载 http://localhost:8080/rest/filename.txt。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:4200” 使用权。响应的 HTTP 状态代码为 404。
注意事项:
- 我在 Chrome 58 和 Postman 4.10.7 中对其进行了测试
- 根据https://spring.io/guides/gs/rest-service-cors/ by
默认 @CrossOrigin 只允许 GET、HEAD 和 POST 跨域
要求。虽然指定
@CrossOrigin(methods = [RequestMethod.GET, RequestMethod.DELETE])没有帮助 - 为简洁起见,我省略了一些代码。实际控制器也有相同映射的 GET 请求,delete 方法有返回类型并产生 JSON 响应,以及其他我认为不会影响问题的小东西。
【问题讨论】:
-
“响应的 HTTP 状态代码为 404。”
-
@sideshowbarker 如果我通过相同的 URL 使用 GET 请求,它可以工作并返回文件,所以我看不到在这个方向上进一步寻找的地方。
-
@Marged 我无法测试它,因为它还没有部署在任何地方,我现在不能这样做。
标签: spring spring-mvc cors http-delete