我正在尝试将JSON对象POST到我的Spring MVC控制器,但我只收到Access-Control-Allow-Origin错误.
我的控制器:
@RequestMapping(value= "/add",method = RequestMethod.POST,headers = {"content-type=application/json"})
public @ResponseBody Reponse addUser(Model model,@RequestBody @Valid @modelattribute("user") User user,BindingResult result) {
if (result.hasErrors()) {
Reponse error = new Reponse();
// etc......
return error;
} else {
return service.addUser(user);
}
}
我的Zepto POST:
this.addUser = function (valeur,callback) {
$.ajax({
type: 'POST',url: 'http://127.0.0.1:8080/AgenceVoyage/user/add',data: JSON.stringify({"mail" : "toto@toto.fr","password" : "titi"}),dataType: "json",contentType: "application/json",success: function(data) {
if(data.reponse == "OK") {
window.location = "main.html";
} else {
alert("PROBLEM");
}
},error: function(xhr,type) {
alert("ERROR");
}
});
};
我尝试在POST请求中没有stringify,在@RequestMapping中没有标题.
我的结果:
OPTIONS 07000 No
‘Access-Control-Allow-Origin’ header is present on the requested
resource. Origin ‘07001’ is therefore not allowed
access. zepto.min.js:2 XMLHttpRequest cannot load
我找到了解决方案:
首先,创建一个新的过滤器,它将设置标头响应:
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,servletexception {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,DELETE");
response.setHeader("Access-Control-Max-Age","3600");
response.setHeader("Access-Control-Allow-Headers","x-requested-with");
chain.doFilter(req,res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
之后,在您的web.xml中添加以下行:
<filter> <filter-name>cors</filter-name> <filter-class>MY.PACKAGE.SimpleCORSFilter</filter-class> </filter> <filter-mapping> <filter-name>cors</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
那就是全部!