我有一个基于@RestController和AngularJS的简单项目。我可以将Angular的GET请求发送到@RestController,但无法发送POST请求。我在浏览器控制台中出错:
XMLHttpRequest无法加载http:// localhost:8080 / add。Access-Control-Allow- Headers不允许请求标头字段Content-Type。
我的@RestController:
@RestController public class AngularController { //@Autowired // PhraseService phraseService; Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/add", method = RequestMethod.POST) public void add(@RequestBody String str){ logger.info("Added"); logger.info(str); } @RequestMapping("/") public void angularController(){; logger.info("Request!"); } }
这是我的CORS过滤器:
@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"); response.setHeader("Content-Type", "application/json"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }
我的AngularJS控制器:
function addController($scope, $http){ $scope.url = 'http://localhost:8080/add'; $scope.addPhrase = function(){ $http.post($scope.url, {"data": $scope.value}); } }
和index.html:
<!doctype html> <html ng-app> <head> <title>Hello AngularJS</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script> <script src="server.js"></script> </head> <body> <div ng-controller="addController"> <form> <input type="text" np-model="value"/> <button type="button" ng-click="addPhrase()">Send!</button> </form> </div> </body> </html>
我试图用标题:“ Content-Type”:“ application / json”解决此问题,但是它给了我错误的请求错误。
您还可以考虑使用即将发布的Spring Framework 4.2版本中提供的本地CORS支持。有关更多详细信息,请参见此博客文章。
默认情况下,它配置为自动接受所有标头,因此,一旦启用带有CrossOrigin注释或Java配置的CORS支持,它便应立即起作用。
CrossOrigin