不支持请求方法“选项” - Spring 引导应用程序
Request method 'OPTIONS' not supported - Spring Boot Application
客户端使用 Angularjs,我使用过滤器配置了 Spring Boot 应用程序 CORS,它适用于 GET、POST 方法,但是,当我尝试使用模块发送 PUT 请求时$http我在浏览器控制台中得到了这个:
注意:url = http://localhost:8080/localbusinessusers/[对象%20对象]
选项网址 (匿名函数) @ angular.js:11442sendReq @ angular.js:11235serverRequest @ angular.js:10945processQueue @ angular.js:15552(匿名函数) @ angular.js:15568Scope.$eval @ angular.js:16820Scope.$digest @ angular.js:16636Scope.$apply @ 角度.js:16928done @ 角度.js:11266完成请求 @ 角度.js:11464请求加载@ 角度.js:11405 app.html:1 XMLHttpRequest 无法加载 网址。响应 对于印前检查具有无效的 HTTP 状态代码 405 角度.js:11442 XHR 加载失败:放置 "网址"。
我在 Spring Boot 控制台上得到了这个:
2016-03-08 23:19:51.212 警告 27044 --- [ XNIO-2 任务-2] o.s.web.servlet.PageNotFound : 请求方法 'OPTIONS' 不支持
我的 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
}
}
我的 RestController 中的 REST 方法:
@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 客户端工作
如果选项请求被禁止,您可以通过将其添加到application.properties
来配置DispatcherServlet
以调度所有选项请求:
spring.mvc.dispatch-options-request=true
有关使用Spring Boot的选项请求和Spring MVC的更多信息,有一个很好的帖子 使用Spring Boot处理选项请求
您还可以尝试本文中的示例来处理 CORS 并支持选项请求,方法是创建一个简单的控制器来返回所有选项请求的NO_CONTENT:http://dontpanic.42.nl/2015/04/cors-with-spring-mvc.html
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 从Spring应用程序运行PhantomJS以获取网页缩略图
- 如何将我的Ionic应用程序与我的java服务器(Spring MVC)连接
- 不支持请求方法“选项” - Spring 引导应用程序
- 如何在 jsp 视图中加载 extjs 5 应用程序 - Spring MVC
- angularjs和spring应用程序不是从war文件运行的
- 在Spring MVC应用程序中使用jquery和jstl动态添加web内容
- 将支付网关与angularjs应用程序集成到spring后端
- 从外部应用程序到Spring Security的Ajax身份验证
- 如何在基于java应用程序的spring中实现windows身份验证
- 在我的spring mvc应用程序中从jsp调用外部js中的jquery函数
- 如何提供用户控制在spring MVC web应用程序
- Spring引导-为什么我的应用程序找不到静态资源?