我有以下课程
@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注释处理中有错误?!
答案 0 :(得分:1)
如果我正确理解您的问题,可以在一种特定方法上指定CORS原点。
Sprint启动文档:https://spring.io/guides/gs/rest-service-cors/
启用CORS
控制器方法CORS配置
这样RESTful Web服务将包含CORS访问控制 在其响应中的标题,您只需要添加@CrossOrigin 处理程序方法的注释:
以下是Spring启动网站的示例:
@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));
}