Spring MVC + Zepto POST中的“ Access-Control-Allow-Origin”错误
问题内容:
我正在尝试将JSON对象发布到我的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
。
我的结果:
选项http://127.0.0.1:8080/AgenceVoyage/user/add所请求的资源上不存在“
Access-Control-Allow-Origin”标头。因此,不允许访问源’ http://
localhost:9000
‘。zepto.min.js:2 XMLHttpRequest无法加载
问题答案:
我找到了解决方案:
首先,创建一个新的过滤器,该过滤器将设置标头响应:
@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>
而这一切!