Веб-служба Angular и rest вызывает: «Ожидаемый ответ содержит объект, но получил массив»

0

Я занимаюсь угловыми и веб-сервисами. Моя цель - сделать угловое обслуживание, которое получает данные из веб-сервиса. Соединение с сервером выполняется, и сервер возвращает некоторые данные. Проблема в том, что я получаю ошибку:

    Error: $resource:badcfg
Response does not match configured parameter
Error in resource configuration for action 'featured'. Expected response to contain an object but got an array (Request: undefined products/featured)

Я точно не знаю, где моя ошибка, или $ resource реализован неправильно, или контроллер Spring неправильно? Может быть, кто-то может дать какие-то предложения, как лучше всего это сделать?

мой код:

Контроллер WebService:

    @RestController
@RequestMapping("/products")
public class ProductManagementController {

    @Autowired
    ProductManagementService productService;

    @RequestMapping(value="/featured")
    public ResponseEntity<List<ProductModel>> getFeaturedProducts() {
        List<ProductModel> products = productService.getFeaturedProducts();
        if (products.isEmpty()) {
            return new ResponseEntity<List<ProductModel>>(HttpStatus.NO_CONTENT);
        }
        return new ResponseEntity<List<ProductModel>>(products, HttpStatus.OK);
    }

    @RequestMapping(value="/recommended")
    public ResponseEntity<List<ProductModel>> getRecommendedProducts(){
        List<ProductModel> products = productService.getRecommendedProducts();
        if(products.isEmpty()){
            return new ResponseEntity<List<ProductModel>>(HttpStatus.NO_CONTENT);
        }
        return new ResponseEntity<List<ProductModel>>(products,HttpStatus.OK);
    }

}

Угловое обслуживание:

    (function() {
    'use strict';

    var mainApp = angular.module('mainApp');
    mainApp.factory('ProductService', [ '$resource', function($resource) {
        return $resource('products/:action/:sub', {}, {
            'featured' : {
                mothod : "GET",
                params : {
                    action : 'featured',
                    sub : ''
                }
            }
        });
    } ]);

    mainApp.controller('featuredItems', [ '$scope', 'ProductService',
            function($scope, ProductService) {
                ProductService.featured(function(responseData) {
                    debugger; //This breake point is not colled 
                });
            } ]);
})();
  • 0
    Перейдите по адресу docs.angularjs.org/api/ngResource/service/$resource и найдите isArray . Кроме того , это method , не mothod .
  • 0
    isArray сделал isArray дело? Я не поймал немного в документации. Этот параметр нужен всегда, когда я получаю список с сервера?
Показать ещё 3 комментария
Теги:
spring
resources
rest
web-services

1 ответ

1

То, что вы хотите походить с вашими featured действия является встроенным query действия, определение 'query': {method:'GET', isArray:true} в соответствии с документацией. Вы всегда должны делать это при получении массивов объектов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню