当消耗=“application / json”时出现跨站点错误

时间:2017-07-31 07:59:15

标签: spring angular cors

我正在使用角度2和弹簧4.在我的控制器中,我设置响应标题如下

this.res.setHeader("Access-Control-Allow-Origin", "*");
this.res.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, DELETE");

并使用下面的这一行来处理请求。

    @RequestMapping(value="/api/movieCategory/create", method = RequestMethod.POST)
    @ResponseBody   
    public String createMovieCategory(ModelMap model,HttpServletResponse res, @RequestParam Map<String,String> allRequestParams,
            HttpServletRequest req ) {

完美无缺。没有跨站点错误,但是当我向@RequestMapping添加consumes =“application / json”参数时,我得到以下错误。我不明白发生了什么。有什么想法吗?

  

XMLHttpRequest无法加载   http://localhost:8080/api/movieCategory/create。没有   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:4200”   访问。响应的HTTP状态代码为415。

1 个答案:

答案 0 :(得分:1)

设置客户端标题content-type: application/json

在您的角度服务中导入来自@angular/http

的标头和RequestOptions
import {Http, Response, RequestOptions, Headers} from '@angular/http';

然后在你发布之前的某个地方:

const headers = new Headers({ 'Content-Type': 'application/json' });
const options = new RequestOptions( {headers: headers});

然后发帖,传递你的选项对象:

...
this.http.post("/api/movieCategory/create", someData, options)
...

当您添加consumes = "application/json"选项时,您明确地说服务器需要application / json数据类型。如果在未指定数据类型的情况下发出cors请求,则会出现415错误。在客户端添加标头应该允许客户端告诉服务器它在请求中发送的数据是application/json并且应该被接受。