【发布时间】:2014-01-31 12:44:49
【问题描述】:
我正在使用 Spring 3.2.2 和 jQuery。
在本地一切正常。我制作了一个 CORS 过滤器,它也可以正常工作。
从另一个主机调用的每个服务方法都在工作,除了一个。实际上,这是在客户端使用@RequestBody 和$.toJSON / contentType 的唯一方法。
弹簧侧:
@RequestMapping(value = "/requestOrder", method = RequestMethod.POST)
@ResponseBody
public Object requestOrder(@RequestBody OrderViewModel order) throws NamingException {
...
}
jQuery 方面:
$.ajax({
type : 'POST',
url : serviceUrl + 'requestOrder',
crossDomain : true,
data : $.toJSON({ ...orderdata... }),
contentType : 'application/json; charset=UTF-8'
});
Chrome 的控制台日志:
XMLHttpRequest cannot load https://REMOTE_HOST/project/service/requestOrder. The request was redirected to 'https://REMOTE_HOST/project/;jsessionid=84781b083f5305ffa22a0adae0a6', which is disallowed for cross-origin requests that require preflight.
HTTP 标头:
Request URL:https://.../requestOrder
Request Method:OPTIONS
Status Code:302 Moved Temporarily
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:POST
Cache-Control:no-cache
Connection:keep-alive
Host:...
Origin:http://...
Pragma:no-cache
Referer:http://...
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36
我没有看到应该设置的Content-Type...请求方法是OPTIONS ?!
这让我认为问题来自 Spring,但这实际上在本地工作......
我很乐意得到一些帮助。
【问题讨论】:
-
您能否在错误消息中发布完整的重定向 URL?
-
其实不是正确的,但我会重命名。
-
尝试将produce="application/json" 添加到您的RequestMapping
-
如果是跨域 JSON,您可能需要使用 JSONP。在这里查看:stackoverflow.com/questions/2067472/what-is-jsonp-all-about
-
produces="application/json"已经在控制器上 - 抱歉我没有提到它。打算用 JSONP 试试。
标签: java javascript jquery spring spring-mvc