Java springrestfullweb服务+;AngularJS HTTP 404错误
我试图在本地机器上使用webservice并使用Java springrestfullweb服务+;AngularJS HTTP 404错误,java,spring,angularjs,Java,Spring,Angularjs,我试图在本地机器上使用webservice并使用AngularJS$http。通过浏览器,一切正常,我收到正确的JSON响应。 但是使用AngularJS$http,我收到404错误,但是,找到了处理程序并生成了响应 前端: $http.get('http://localhost:8080/apartments.json'). success(function(data){ $scope.apartments = data;
AngularJS
$http。通过浏览器,一切正常,我收到正确的JSON
响应。
但是使用AngularJS
$http,我收到404错误,但是,找到了处理程序并生成了响应
前端:
$http.get('http://localhost:8080/apartments.json').
success(function(data){
$scope.apartments = data;
}).
error(function(data, status){
alert("Error "+ status);
});
后端:
@Controller
public class ApartmentsController {
@RequestMapping(value = "/apartments", method = RequestMethod.GET)
public @ResponseBody List<ApartmentEntity> getAll(){
ApartmentEntity apartmentEntity = new ApartmentEntity();
apartmentEntity.setName("test");
apartmentEntity.setPrice(1000);
return Arrays.asList(apartmentEntity);
}
}
@控制器
公共类公寓控制器{
@RequestMapping(value=“/plants”,method=RequestMethod.GET)
public@ResponseBody List getAll(){
ApartmentEntity ApartmentEntity=新的ApartmentEntity();
apartmentEntity.setName(“测试”);
apartmentEntity.setPrice(1000);
返回数组.asList(apartmentEntity);
}
}
Servlet映射正确
您能告诉我怎么回事吗?问题是Angular在默认情况下尝试使用,因为这是从一台服务器加载的一个页面到另一台服务器上运行的REST服务的ajax请求尝试 它尝试使用CORS的方式是通过发出带有默认标题的GET,该标题触发浏览器执行“飞行前”
OPTIONS
请求
此飞行前自动选项
请求用于浏览器获取服务器支持的方法列表,这是CORS的第一步
所以404来自这个选项请求
从角度来看,这似乎在最近的版本中得到了修复,因为它引起了用户的许多问题。另请参见触发修复的
对于本地开发,始终可以在同一台服务器上部署两个应用程序,问题就解决了
如果在生产过程中需要在不同的服务器上运行前端/后端,则可以使用通用前端服务器(如nginx/Apache)代理这些服务器,或者打开CORS,请参阅。您从何处提供angular html文件?它是同一台机器上的独立web服务器。这里的关键问题是,您的RESTful端点是否与您的客户端应用程序在同一来源下提供服务。如果是这样的话,那么我们可以深入研究端点没有被击中的原因。否则,我们可能需要讨论CORS或代理策略。事实上,WebDevice正在从浏览器和客户端受到冲击。我怀疑跨域请求存在问题,但我没有收到任何与此相关的消息。只有404个错误。@shevchik我想你没有明白我的问题。您能告诉我RESTful服务器的协议、主机名和端口,以及服务于您的应用程序的服务器的协议、主机名和端口吗?例如,RESTful服务器是:http://localhost:8080
正在从http://localhost:4040
。那么您就遇到了CORS冲突。感谢您的解释404错误从何而来from@shevchik启用CORS的另一种方法是代理您的请求(这可能并不总是可能[从技术上讲不可能])。也就是说,所有RESTful端点请求都可以由您自己的web应用程序服务器转发到相应的RESTful端点服务器。因为服务器端不受CORS的约束。