其他分享
首页 > 其他分享> > 如何使用AngularJS的$resource和spring rest控制器获取布尔值

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

作者:互联网

尝试使用angular js的$resource服务从spring restcontroller发送获取布尔值,但是在$resource.get的响应中什么也没有得到.我是否需要在客户端或服务器端添加任何其他内容来获取布尔资源.下面是我的REST控制器和$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获取布尔响应的方式,并且在服务器端不使用任何额外的对象

解决方法:

$resource不返回布尔值

$resource.get方法仅返回对象引用,而不返回布尔值.

重要的是要意识到调用$resource对象方法会立即返回空引用(对象或数组取决于isArray).从服务器返回数据后,将使用实际数据填充现有引用.

在后台,$resource服务使用angular.copy填充对象.

angular.copy

Creates a deep copy of source, which should be an object or an array.

  • If a destination is provided, all of its elements (for arrays) or properties (for objects) are deleted and then all elements/properties from the source are copied to it.

07001

由于布尔值没有元素/属性,因此不会复制任何内容.

要返回布尔值,请使用$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;
}

标签:ngresource,angularjs,rest,angular-resource,spring
来源: https://codeday.me/bug/20191026/1934085.html