2016-11-28 86 views
0

我的工厂使用Restangular getList()方法返回空数组,尽管在处理操作后端的spring控制器中从数据库获取记录。我不知道这个问题的原因是在Java还是应用程序的角度方面。这是为什么发生?Restangular getList()返回空数组

FlightController.java

package regularmike.airline.controller; 

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

import regularmike.airline.entity.Flight; 
import regularmike.airline.service.FlightService; 

@RestController 
@RequestMapping("/flight") 
public class FlightController { 

    @Autowired 
    FlightService flightService; 

    @RequestMapping(value = "/getFlights", method = RequestMethod.GET, produces = "application/json") 
    public List<Flight> getAllFlights() { 
     List<Flight> allFlights = flightService.getAllFlights();  

     return allFlights; 

    } 

    @RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = "application/json") 
    public Flight getSeats(@PathVariable long id) { 
     Flight result = flightService.getByFlightid(id); 

     return result; 
    } 

} 

FlightFactory.js

(function() { 
    'use strict' 

    angular.module('airline').factory('FlightFactory', FlightFactory); 

    function FlightFactory(Restangular) { 
     function getAllFlights() { 
      return Restangular.all('flight/getFlights').getList(); 
     } 
     return { 
      getAllFlights: getAllFlights 
     }; 
    } 
})(); 

DashboardController.js

(function() { 
    'use strict' 

    angular.module('airline').controller('DashboardController', ['FlightFactory', DashboardController]); 

    function DashboardController(FlightFactory) { 
     var dashCtrl = this; 

     FlightFactory 
     .getAllFlights() 
     .then(getFlights) 

     function getFlights(response) 
     { 
      dashCtrl.flights = response; 
      console.log(dashCtrl.flights); 
     } 
    } 

})(); 

config.js

(function() { 
    angular.module('airline').config(
      [ 'RestangularProvider', restangularConfig ]); 

    function restangularConfig(RestangularProvider) { 
     RestangularProvider.setBaseUrl('/'); 

     RestangularProvider.setDefaultHeaders(
       {"Accept": 'application/json'}, 
     {"Content-Type": "application/json+hal"}); 

     RestangularProvider.setResponseInterceptor(function (data, operation, what) { 
      var resp; 
      if (operation === 'get') { 
       if (_.has(data, '_embedded')) { 
        resp = data._embedded; 
       } else { 
        resp = data; 
       } 
       if (_.has(data, '_links')) { 
        resp._links = data._links; 
       } 
       return resp; 
      } 
      if (operation === 'getList') { 
       if (_.has(data, '_embedded')) { 
        resp = data._embedded[what]; 
       } else { 
        resp = []; 
       } 
       if (_.has(data, '_links')) { 
        resp._links = data._links; 
       } 
       return resp; 
      } 
      return data; 
     }); 

     RestangularProvider.setRequestInterceptor(function (element, operation, route, url) { 
      if (operation === 'put' || operation === 'post') { 
       if (angular.isDefined(element._links)) { 
        element._links.self.href = element._links.self.href.split('{?projection}')[0]; 
       } 
       return element; 
      } 
     }); 

     RestangularProvider.setRestangularFields({ 
      selfLink: '_links.self.href' 
     }); 
    } 
})(); 

回答

0

返回列表的方法的返回值应该绑定到Web响应主体,这是您的情况JSON表示(请注意,@ResponseBody)。

@RequestMapping(value = "/getFlights", method = RequestMethod.GET, produces = "application/json") 
    public @ResponseBody List<Flight> getAllFlights() { 
     List<Flight> allFlights = flightService.getAllFlights();  
     return allFlights; 
    } 

此外,为了使其工作,不要忘了JSON提供设立弹簧侧。

<!-- Jackson JSON Mapper --> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.7</version> 
</dependency> 

<!--jackson-core-asl --> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId> 
    <version>1.9.7</version> 
</dependency>