前后端交互由于是在两个jvm上运行,所以必须要解决跨域问题。
如果springmvc用的是4.2版本以上的话,那么恭喜你,解决跨域的问题非常的简单。在controller上的方法加上@CrossOrigin注解就可以解决。
主要看下前端的代码:
//调用远程地址,获取数据 get方法 //返回response的json串 public getData(url: string): Promise<any> { return this.http .get(url) .toPromise() .then(response => response.json() as any) .catch(this.handleError); }
delete(url: string,obj: any) { // url = `${url}/${obj.id}`; url = url + "/" + obj.id; return this.http.post(url,JSON.stringify(obj),{ headers: this.headers }) .toPromise().then(res => res.json() as any) .catch(this.handleError); }
后端的方法前加上注解
@RequestMapping(value = {"/deleteById/id/{id}"},method = RequestMethod.POST) @ResponseBody @CrossOrigin public ItooResult deleteById(@PathVariable String id,HttpServletResponse response) { 业务需求代码 }
问题就这样解决了。说下自己在解决过程中遇到的问题
1、修改了后端的解决跨域的代码,依旧没有解决跨域的问题,经过一番探索发现,把idea的服务停止后,仍旧可以访问到服务。于是意识到服务修改了根本没有起作用。于是重启电脑。
所以:每次停止服务时,都测试下,确保服务停止了。然后在启动,确保每次访问都是自己修改好的服务。
2、一点收获,对于非get的复杂请求,浏览器会先发送一个options请求,确保服务是否支持发杂请求,然后会再次发送一个真正你要发送的请求。比如:发送post请求,会先发送options的预请求,先确保服务支持post请求,然后会再发送一个post请求。
原文链接:https://www.f2er.com/angularjs/146628.html