如何使用 AngularJS 的 $resource 和 spring rest 控制器获取布尔值
Posted
技术标签:
【中文标题】如何使用 AngularJS 的 $resource 和 spring rest 控制器获取布尔值【英文标题】:How to get boolean value using $resource of AngularJS and spring rest controller 【发布时间】:2017-08-18 22:16:15 【问题描述】:尝试使用 angular js 的 $resource 服务从 spring restcontroller 发送 get 布尔值,但没有得到任何响应 $resource.get。我需要在客户端或服务器端添加什么额外的东西来获取布尔资源。下面是我的休息控制器和 $resource 的代码 休息控制器 -
@RequestMapping(value="validate/company/companyName",method=RequestMethod.GET,produces="application/json")
public Boolean validateCouponCode(@PathVariable("companyName") String companyName)
return companyService.exists(companyName, Column.SITE_NAME);
Angular js 的$resources -
function validateCompanyFn(companyName)
return $resource("admin/rest/company/validate/company/:companyName")
.get(companyName:companyName).$promise
我做错了什么? 请建议,如果有另一种使用 $resource 获取布尔响应的方法,并且在服务器端不使用任何额外的对象
【问题讨论】:
当您直接向资源发出请求时(curl、postman 等)。收到回复了吗? 没有必要用$q.defer
制造一个承诺,因为$promise
已经是一个承诺。
@tah tatsumoto,是的,在 chrome 浏览器上直接点击 url 时得到正确响应
【参考方案1】:
$resource 不返回布尔值
$resource.get
方法只返回对象引用,而不是布尔值。
重要的是要意识到调用$resource
对象方法会立即返回一个空引用(对象或数组取决于isArray
)。从服务器返回数据后,现有引用将填充实际数据。
在后台,$resource
服务使用angular.copy
填充对象。
angular.copy
>创建源的深层副本,应该是对象或数组。
如果提供了目标,则会删除其所有元素(对于数组)或属性(对于对象),然后将源中的所有元素/属性复制到它。— AngularJS angular.copy API Reference
由于布尔值没有元素/属性,因此不会复制任何内容。
要返回布尔值,请使用$http service:
//USE $http service
function getSubCategoryIdNameFn(catId)
var url = "admin/rest/subcategory-id-name/" + catId;
return $http.get(url).then(function(response)
return response.data;
);
;
没有必要用$q.defer
制造承诺,因为$promise
已经是承诺。只需返回$promise
//SIMPLIFY
function getSubCategoryIdNameFn(catId)
//var deferred = $q.defer();
//vvvv RETURN the $promise
return $resource("admin/rest/subcategory-id-name/:catId",catId:"@catId")
.query(catId:catId)
.$promise
//.then(function(response)
// deferred.resolve(response);
//,function(error)
// deferred.reject(error);
//);
//return deferred.promise;
【讨论】:
以上是关于如何使用 AngularJS 的 $resource 和 spring rest 控制器获取布尔值的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS:使用 $resource 上传文件(解决方案)
如何将标头动态传递给 angularjs 的 $resource