请求方法“选项”不支持 - 春季启动应用
我使用春季启动在服务器端和Angularjs在客户端,我使用过滤,它配置春季启动应用CORS工作了GET,POST方法,但是,当我试图发送PUT使用$ HTTP模块的要求,我在浏览器控制台得到这个:请求方法“选项”不支持 - 春季启动应用
说明:URL = http://localhost:8080/localbusinessusers/[object%20Object]
OPTIONS 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无法加载 url。对于预检的响应 具有无效的HTTP状态代码405 angular.js:11442 XHR 加载失败:PUT “”url“。
,我得到了这对春季启动控制台:
2016年3月8日23:19:51.212 WARN 27044 --- [XNIO-2任务2] osweb。 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
}
}
我REST方法在我RestController:
@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)
.success(function (data, status, headers) {
console.log('data: ' + data);
})
.error(function (data, status, header, config) {
console.log('data: ' + data);
console.log('status: ' + status);
console.log('header: ' + header);
console.log('config: ' + config);
});
注意: PUT请求正在使用高级REST客户端
如果选择请求被禁止的,可以配置DispatcherServlet
将所有选项请求发送到您的application.properties
:
spring.mvc.dispatch-options-request=true
有关使用Spring启动选项请求和Spring MVC的更多信息,有一个很好的职位Handling Options Request using Spring Boot
您也可以尝试在这个职位的例子通过创建一个简单的处理CORS和支持选项的请求控制器返回所有选项请求的NO_CONTENT:http://dontpanic.42.nl/2015/04/cors-with-spring-mvc.html
我编辑了我的application.properties文件,但仍然收到相同的错误 – jemlifathi
我更新了答案并附加了一个链接。 – pczeus
NO_CONTENT选项请求控制器对您有帮助吗? – pczeus