如何使$ resource接受字符串数组(AngularJS)

时间:2015-02-18 17:05:45

标签: arrays angularjs angular-resource

我想向一个REST服务发出请求,其中查询参数包含一个字符串数组:

productRestService.getProductsInfo(productIdsArray,"id,name,rating").$promise.
               then(function(productData) { // success: Produktdaten auslesen                
                    updateProductList(productData);

                }, function (error) {
                    console.log("Status: " + error.status);       
                });

资源服务如下:

productRestService.getProductsInfo = function(productIds, properties) {
        console.log('productRestService.getProductsInfo(): productIds' + productIds);
        var productInfoResourceData;
        var ProductInfoResource = $resource('/rest/products/productsInfo/:productIds/:properties',
            {
                productIds:'@productIds',
                properties:'@properties'
            }
        );
        productInfoResourceData = ProductInfoResource.query(
            {
                productIds: productIds,
                properties: properties
            }
        );
        return productInfoResourceData;

    }

将服务结果调用为404-Error,因为$ resource对象的默认行为是,当" query"时,它需要一个对象的数组。使用。

我怎样才能实现我的$ resoure-service接受一串字符串?我尝试使用" transformRequest" (请参阅下面的代码段),但这也不起作用。

  {
                query: {
                  method: 'GET',
                  isArray: true,
                  transformResponse: function (data, headers) {
                    var tranformed = [];
                    [].forEach.call(eval(data), function (d) {
                        tranformed.push({ name: d });
                    });
                    return tranformed;
                    }
                }
            }

REST服务productService.getProductsInfo函数中的console.log显示服务收到的正确数据:

["212999cc-063b-4ae8-99b5-61a0af39040d","17e42a28-b945-4d5f-bab1-719b3a897fd0","9307df3e-6e7a-4bed-9fec-a9d925ea7dc0"]

该URL与其他REST-URLS一致,应该是这样的(并且相应地连接到域):

'/rest/products/productsInfo/:productIds/:properties'

编辑: productService中的其他函数按顺序响应,它们不使用数组而是使用JSON对象,并且不会显示意外行为。

1 个答案:

答案 0 :(得分:1)

(这最初是一个评论,但它需要格式清晰的代码示例。)

我怀疑您的:productIds模板参数已填入模板"[object Object]"。我只看到了您的模板网址,而不是实际构建的网址,所以我无法确定。

如果您的服务器期望:productsIds模板参数为JSON的URL,例如---

rest/products/productsInfo/["id1","id2","id3"]/{"prop1":true,"prop2":false}

---然后尝试将getProductsInfo定义编辑为以下内容:

productRestService.getProductsInfo = function (productIds, properties) {
    var ProductsInfo = $resource('/rest/products/productsInfo/:productIds/:properties', {
        productIds: function () {
            return angular.toJson(productIds);
        },
        properties: function () {
            return angular.toJson(properties);
        }
    });
    return ProductsInfo.query();
}

(公平警告,我没有测试此代码。它只是对您的示例进行快速编辑。)

这样,您确保参数值正在转换为服务器期望的JSON(如果服务器在URL中期望JSON,那么)。