仅带有 POST 的 Spring Boot 和 @CrossOrigin 注释
Posted
技术标签:
【中文标题】仅带有 POST 的 Spring Boot 和 @CrossOrigin 注释【英文标题】:SpringBoot and @CrossOrigin annotation with POST only 【发布时间】:2016-10-18 02:04:12 【问题描述】:我有以下课程
@RestController
@RequestMapping("/bets")
@CrossOrigin
public class BetRestController
@Autowired
private BetController betController;
@ResponseBody
@RequestMapping(method=RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public BetResource betOnGame(@RequestBody @Valid BetResource betResource)
return BetTranslator.from(betController.betOnGame(BetTranslator.from(betResource)));
@ResponseBody
@RequestMapping(method = RequestMethod.GET)
public List<BetResource> getAllBets()
return betController.getAllBets().stream().map(BetTranslator::from).collect(Collectors.toList());
问题是当我尝试访问我得到的 POST 方法时:
XMLHttpRequest 无法加载 http://localhost:8080/bets。 Access-Control-Allow-Origin 不允许来源http://localhost:3000。
但 GET 方法有效。
我的配置有什么问题,或者@CrossOrigin 注释处理中可能存在错误?!
【问题讨论】:
你能发布 HTTP 请求和响应头(来自网络)吗? 【参考方案1】:如果我正确理解您的问题,则可以在一种特定方法上指定 CORS 来源。
Sprint Boot 文档:https://spring.io/guides/gs/rest-service-cors/
启用 CORS
控制器方法CORS配置
这样 RESTful Web 服务将包含 CORS 访问控制 在其响应中添加标题,您只需添加一个 @CrossOrigin 处理程序方法的注释:
这是来自 Spring Boot 网站的示例:
@CrossOrigin(origins = "http://localhost:9000")
@RequestMapping("/greeting")
public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name)
System.out.println("==== in greeting ====");
return new Greeting(counter.incrementAndGet(), String.format(template, name));
【讨论】:
如果你看看我的例子,这正是我所做的。虽然我的 post 方法和 get not 遇到了跨源问题。 能否提供 POST 和 GET 请求的 HTTP 标头? 问题出在客户端代码中,因为在这种情况下,我有两种方法 get 和 post 遵循代码按预期工作: private makePostRequest(path:string, body: any) let headers = new Headers (); headers.append('Content-Type', 'application/json');让网址 =http://betty-backend.cfapps.io/$ path
; return this.http.post(url, JSON.stringify(body), headers: headers ) .map((res: Response) => res.json()) 并且需要注解@CrossOrigin以上是关于仅带有 POST 的 Spring Boot 和 @CrossOrigin 注释的主要内容,如果未能解决你的问题,请参考以下文章
带有千分尺 Elasticsearch 注册表的 Spring Boot 仅索引空文档
Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?
带有 LocalDateTime 的 Spring Boot 项目
执行 POST 请求时的 Spring Boot 端点 403 OPTIONS