我们的资源定义如下:
var services = angular.module('services', ['ngResource']);
services.factory('Facility', function ($resource) {
var resource = $resource('/facility/:id.json', {id: '@id'}, update);
resource.restore = function (pathParams, success, error) {
$resource('/facility/:id/restore.json', {}, update).update(pathParams, {}, success, error);
};
return resource;
});
其中update被定义为自定义操作,因为Angular默认情况下不支持PUT,如下所示:
var update = {update: {method: 'PUT'}};
现在,通过调用Facility.get触发的GET网址是http://localhost:9091/facilities/1.json
,例如,它正常工作。但是我们正在使用Spring安全性,并且在会话超时并且随后重定向到登录和登录成功之后,我们执行了一个location.reload(),它重新加载了编辑页面,但是这个GET URL失败并且JSON解析错误“没有要映射的内容......输入结束“。我们发现重新定义了另一个服务工厂,如
services.factory('FacilityGet', function ($resource) {
return $resource('facilities/:id', {}, {});
}
并使用它解决了这个问题。使用任何更新操作或“{id:'@ id'}”参数会导致问题 - 只有当我们排除它们时,相应的资源才会触发正确的GET请求。
请注意,从早期资源触发的GET仅在登录重定向后第一次失败,但稍后工作正常。任何帮助或指针都非常有用。
谢谢,
稻谷