Dans mon projet AngularJS, j'essaie d'utiliser la méthode Restangular getList, mais elle renvoie une erreur car la réponse de l'API n'est pas directement un tableau mais un objet contenant un tableau.
{
"body": [
// array elements here
],
"paging": null,
"error": null
}
Le message d'erreur Restangular est:
Error: Response for getList SHOULD be an array and not an object or something else
Est-il possible de dire à Restangular que le tableau qu'il recherche se trouve à l'intérieur de la propriété body
?
Oui, voir Documentation Restangular . Vous pouvez configurer Restangular comme ceci:
rc.setResponseExtractor(function(response, operation) {
if (operation === 'getList') {
var newResponse = response.body;
newResponse.paging = response.paging;
newResponse.error = response.error;
return newResponse;
}
return response;
});
Edit : Il semble que l'API de Restangular soit maintenant améliorée, et que la méthode actuelle à utiliser est addResponseInterceptor . Certains ajustements peuvent être nécessaires pour la fonction passée.
Je pense que vous devriez utiliser le customGET du Méthodes personnalisées
Restangular.all("url").customGET(""); // GET /url and handle the response as an Object
comme Collin Allen vous a suggéré d'utiliser addResponseInterceptor comme ceci:
app.config(function(RestangularProvider) {
// add a response intereceptor
RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
var extractedData;
// .. to look for getList operations
if (operation === "getList") {
// .. and handle the data and meta data
extractedData = data.body;
extractedData.error = data.error;
extractedData.paging = data.paging;
} else {
extractedData = data.data;
}
return extractedData;
});
});