SpringBoot和@CrossOrigin注释仅使用POST

时间:2016-06-16 13:46:13

标签: java rest spring-boot cors

我有以下课程

@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注释处理中有错误?!

1 个答案:

答案 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));
 }