如何使用AngularJS和spring rest controller的$ resource获取布尔值

时间:2017-03-26 05:49:03

标签: angularjs spring rest angular-resource ngresource

尝试使用angular js的$ resource服务从spring restcontroller发送get boolean值,但是没有得到$ resource.get.Is的任何回应。我需要在我的客户端或服务器端添加以获取布尔资源。下面是我的rest controller和$ 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的资源 -

function validateCompanyFn(companyName)  
    return $resource("admin/rest/company/validate/company/:companyName")
    .get({companyName:companyName}).$promise
}

我做错了什么? 请建议,如果有另一种方法使用$ resource获取布尔响应,并且不在服务器端使用任何额外的对象

1 个答案:

答案 0 :(得分:4)

$ 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;
}