发布到REST接口

时间:2014-10-26 18:49:22

标签: angularjs rest

需要在URL中将名称定义为ID,并且需要发布包含数据的对象。

$ scope.dvModel.naam是充当ID的名称。 filteredObject显然是包含数据的对象。

这就是我调用该服务的方式,根据一些例子似乎没问题。

saveDVservice.query($scope.dvModel.naam, filteredObject);

这是实际的服务。

.factory('saveDVservice', ['$resource', 'CONSTANTS', function($resource, CONSTANTS) {
    'use strict';
    return $resource(CONSTANTS.REST_BASE_URL + '/dv/:name', {}, { query: { method: 'POST', isArray: false, headers: { 'Content-Type': 'application/json' }}});
}]);

这是我在查询字符串参数的网络选项卡中看到的: 0:A 1:d 10:N 11:H 12:我 13:L 14:F 15:电子 2:甲 3:C 4: 5:P 6:一个 7:N 8:N 9:电子

这是名称,但看起来像一个数组。

请求有效负载包含正确顺序的实际对象。 可以给我一些关于如何处理这个问题的指导吗?

2 个答案:

答案 0 :(得分:1)

据我了解,您希望将$scope.dvModel.naam放入网址,并希望filteredObject成为请求有效负载。然后,您需要一个对象,其中包含filteredObject中的所有内容,并在密钥name下另外包含等于$scope.dvModel.naam的值。

此外,您的资源定义可能应该更改 - 在第二个参数$resource中要求您告诉它从给定对象中提取URL数据的方式:

$resource(CONSTANTS.REST_BASE_URL + '/dv/:name', {name: '@name'}, { query: { method: 'POST', isArray: false, headers: { 'Content-Type': 'application/json' }}});

不幸的是,当您的有效负载数据与URL数据分开时,$resource不是最好的$http包装器。也许最好将filteredObject数据包装在其他对象的有效负载中?然后,您的$resource对象会更好,例如{name: ..., data: {"0": "A", "1": "D", ...}}

答案 1 :(得分:1)

由于query的默认操作为{method: 'GET', isArray: true},我将其留下并使用其他默认设置save。这应该是开箱即用的。

app.factory('DVService', function ($resource) {
  return $resource(CONSTANTS.REST_BASE_URL + '/dv', {name: '@name'}, {}); 
}); 

app.controller('MainCtrl', function ($scope, DVService) {
  var postData = {
    name: 'name',
    fooProp: 'foo',
    barProp: 'bar'
  };

  // save/post        
  DVservice.save({dv: postData}).$promise.then(function (response) {
    console.log(response);
  });

  //query/get
  DVService.query({name: 'name'}).$promise.then(function (response) {
    console.log(response);
  });
});