Javascript 请求方法';选项';不受支持-Spring启动应用程序
我在服务器端使用Spring-Boot,在客户端使用Angularjs,我使用过滤器配置Spring-Boot应用程序CORS,它对GET和POST方法有效,但是,当我尝试使用$http模块发送PUT请求时,我在浏览器控制台中得到了以下信息: 注意:url= 选项url (匿名函数)@angular.js:11442sendReq@ angular.js:11235serverRequest@angular.js:10945processQueue@ angular.js:15552(匿名函数)@angular.js:15568Scope.$eval@ angular.js:16820Scope.$digest@angular.js:16636Scope.$apply@ angular.js:16928done@angular.js:11266completeRequest@ angular.js:11464requestLoaded@angular.js:11405 app.html:1 无法加载XMLHttpRequest 网址。回应 对于预飞,HTTP状态代码405 angular.js:11442 XHR无效 加载失败:PUT “网址” 我在春季开机控制台上得到了这个:Javascript 请求方法';选项';不受支持-Spring启动应用程序,javascript,angularjs,spring,spring-boot,cors,Javascript,Angularjs,Spring,Spring Boot,Cors,我在服务器端使用Spring-Boot,在客户端使用Angularjs,我使用过滤器配置Spring-Boot应用程序CORS,它对GET和POST方法有效,但是,当我尝试使用$http模块发送PUT请求时,我在浏览器控制台中得到了以下信息: 注意:url= 选项url (匿名函数)@angular.js:11442sendReq@ angular.js:11235serverRequest@angular.js:10945processQueue@ angular.js:15552(匿名函数)
package com.datcom.fouras;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "http://localhost");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header");
chain.doFilter(req, res);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
@RequestMapping(value = "/localbusinessusers", method = RequestMethod.PUT)
public LocalBusinessUser update(LocalBusinessUser localBusinessUser) {
log.debug("REST request to update a local business user : {}", localBusinessUser);
if (localBusinessUser.getId() == null) {
return save(localBusinessUser);
} else {
LocalBusinessUser localBusinessUser2 = localBusinessUserRepository.findOne(localBusinessUser.getId());
localBusinessUser2 = localBusinessUser;
return localBusinessUserRepository.saveAndFlush(localBusinessUser2);
}
}
2016-03-08 23:19:51.212警告27044---[XNIO-2任务-2]
o、 s.web.servlet.PageNotFound:请求方法“选项”
不支持
我的CORS过滤器:
package com.datcom.fouras;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "http://localhost");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header");
chain.doFilter(req, res);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
@RequestMapping(value = "/localbusinessusers", method = RequestMethod.PUT)
public LocalBusinessUser update(LocalBusinessUser localBusinessUser) {
log.debug("REST request to update a local business user : {}", localBusinessUser);
if (localBusinessUser.getId() == null) {
return save(localBusinessUser);
} else {
LocalBusinessUser localBusinessUser2 = localBusinessUserRepository.findOne(localBusinessUser.getId());
localBusinessUser2 = localBusinessUser;
return localBusinessUserRepository.saveAndFlush(localBusinessUser2);
}
}
MyRestController中的MyREST方法:
package com.datcom.fouras;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "http://localhost");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header");
chain.doFilter(req, res);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
@RequestMapping(value = "/localbusinessusers", method = RequestMethod.PUT)
public LocalBusinessUser update(LocalBusinessUser localBusinessUser) {
log.debug("REST request to update a local business user : {}", localBusinessUser);
if (localBusinessUser.getId() == null) {
return save(localBusinessUser);
} else {
LocalBusinessUser localBusinessUser2 = localBusinessUserRepository.findOne(localBusinessUser.getId());
localBusinessUser2 = localBusinessUser;
return localBusinessUserRepository.saveAndFlush(localBusinessUser2);
}
}
最后,我的$http请求:
$http.put('http://localhost:8080/localbusinessusers/'+localBusinessUser)
.成功(功能(数据、状态、标题){
console.log('数据:'+数据);
})
.错误(功能(数据、状态、标题、配置){
console.log('数据:'+数据);
console.log('状态:'+状态);
log('header:'+header);
log('config:'+config);
});代码>如果禁止选项请求,您可以将DispatcherServlet
配置为通过将其添加到应用程序来发送所有选项请求。属性
:
spring.mvc.dispatch-options-request=true
有关选项请求和使用SpringBoot的SpringMVC的更多信息,请参阅
您也可以通过创建一个简单的控制器来为所有选项请求返回NO_内容,从而尝试本文中处理COR和支持选项请求的示例:我编辑了我的application.properties文件,但仍然收到相同的错误NO_内容选项请求控制器是否可以帮助您,我在application.properties文件中添加了以下行:#ENDPOINTS CORS配置(endpointcors属性)ENDPOINTS.CORS.allow-credentials=false ENDPOINTS.CORS.allowed-headers=Content-Type,x-requested-with,x-Custom-Header ENDPOINTS.CORS.allowed-methods=*ENDPOINTS.CORS.allowed-ories=,endpoints.cors.max-age=3600