我有这样的代码:
客户端(angular2)托管在这个url上:
http://localhost:8080/Me/html/pages/gasolina/country/USA
代码: return this.http
.post(this.supporToolSaveUrl, gasConfigModel, {headers: headers})
.map(res => res.json())
.subscribe(
data => {
console.info("next: ");
console.info(data)
},
err => console.error(err)
);
server (java jersey)
承载在这个url上:
http://localhost:8080/Me/services/countries
代码: @Path("/SaveConfig")
@POST
@Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public void saveConfig(CountryGasStationConfig countryGasStationConfig) throws Exception {
我应该添加这些在jersy注释?
当我在本地运行时,我得到这个错误:
MLHttpRequest cannot load http://locahost:8080/.... Response for preflight is invalid (redirect)
我看到了这篇文章和这篇文章
如何在angular2中实现这个解决方案?
应用程序。
config(['$httpProvider', function ($httpProvider) {
//Reset headers to avoid OPTIONS request (aka preflight)
$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};
}]);
您的java服务器禁用了CORS请求。在客户端更改请求将不起作用,因为当在另一个URL上请求服务器时(即使它只是本地主机上的不同端口)会自动创建OPTIONS请求。这是你无法回避的。
相反,您应该在java服务器上启用CORS。这是一个java jersey教程,它还详细介绍了什么是CORS。