我有一个使用RESTful Web服务在Spring MVC上运行的Web应用程序。 我正在尝试从HTML / Javascript文件向这些Web服务发送JSON。 这是Javascript:

$.ajax
(
{
    type: "post",
    data: JSON.stringify(data),
    contentType : "application/json",
    dataType: "json",
    url: "http://localhost/proj/service",
    success: function(data) 
    {
        callback(data);
    }
}
);

以及Spring MVC中的映射:

@RequestMapping(value = "/proj/service/", method = RequestMethod.POST)  
    public ModelAndView procRequest(@RequestBody String paramsJson, HttpServletResponse resp, WebRequest request_p){        

        resp.setStatus(HttpStatus.CREATED.value());
        resp.setHeader("Location", request_p.getContextPath() + "/proj/service");
        resp.addHeader("Access-Control-Allow-Origin", "*"); 
            //Code
}

由于某种原因,当我从ajax请求中删除contentType密钥时,它会通过,但是它的格式当然不正确,因为我希望Javascript向我发送JSON字符串。 但是由于某种原因,如果我留下contentType键,则会出现以下错误:

XMLHttpRequest cannot load http://localhost:8080/proj/service/. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 

我不知道可能是什么原因导致此错误,因为那里存在适当的标题。

谢谢。

===============>>#1 票数:4

Content-Type标头触发CORS预检请求。 您需要使用以下标头修改处理程序以响应OPTIONS请求:

resp.addHeader("Access-Control-Allow-Origin", "*");
resp.addHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
resp.addHeader("Access-Control-Allow-Headers", "Content-Type");

这应该发送对预检请求的适当响应,然后浏览器将发出实际请求。 您可以在此处了解有关预检请求的更多信息: http : //www.html5rocks.com/en/tutorials/cors/

===============>>#2 票数:2 已采纳

我这样做是这样的:

    @RequestMapping("/listActions")
public @ResponseBody List<Action> list(HttpServletRequest request, HttpServletResponse response) {
    response.addHeader("Access-Control-Allow-Origin", "*");
    response.addHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
    response.addHeader("Access-Control-Allow-Headers", "Content-Type");

    List<Action> actions =  new ArrayList<Action>();
    actions.add(new Action(1, "Do something fantastic"));
    actions.add(new Action(2, "Save the world"));
    actions.add(new Action(3, "Buy beer"));
    actions.add(new Action(4, "Butcher a hog"));
    return actions;
}

  ask by Cenobyte321 translate from so

未解决问题?本站智能推荐: