Aaron
Aaron

Reputation: 2755

AngularJS - Spring MVC Rest : Not updating object after POST

I have created a simple app with Spring and AngularJS with CRUD functions.

Now, my scope variable that contains the arraylist that I pass is not updating when I create a new one.

This is my code for my AngularJS controller

$scope.agency = {id: null, name: '', contact: '', employees: []};
$scope.agencies = [];

$scope.getAllAgencies = function() {
    AgencyService.getAllAgencies()
        .then(
            function (response) {
                $scope.agencies = response;
            }
        )
};

$scope.getAllAgencies();

$scope.createAgency = function(agency) {
    AgencyService.createAgency(agency)
        .then(
                $scope.getAllAgencies(),
            function(errReponse){
                console.error('Error while creating Agency.');
            }
        );
};

$scope.submit = function () {
    console.log("Saving new Agency");
    $scope.createAgency($scope.agency);

    $scope.reset();
};

$scope.reset = function(){
    $scope.agency = {id: null, name: '', contact: '', employees: null};
    $scope.myForm.$setPristine(); //reset Form
};

Service

App.factory('AgencyService', ['$http', '$q', function($http, $q) {
return {
    getAllAgencies: function() {
        return $http.get('/agency')
            .then(
                function(response) {
                    return response.data;
                },
                function(errResponse){
                    console.error('Error while fetching agencies');
                    return $q.reject(errResponse);
                }
            )
    },
    createAgency: function(agency) {
        console.log("Creating Agency");
        return $http.post('/agency', agency)
            .then(
                function (response) {
                    return response.data;
                },
                function (errResponse) {
                    console.error('Error while create agency');
                    return $q.reject(errResponse);
                }
            )
    }
};

}]);

And these are my methods in Spring

Get Agencies

@RequestMapping(value = "/agency", method = RequestMethod.GET)
public ResponseEntity<List<Agency>> getAllAgencies() {
    List<Agency> agencies = agencyService.getAllAgencies();
    if (agencies.isEmpty()) {
        return new ResponseEntity<List<Agency>>(HttpStatus.NO_CONTENT);
    }
    return new ResponseEntity<List<Agency>>(agencies, HttpStatus.OK);
}

Creation of Agency

@RequestMapping(value = "/agency", method = RequestMethod.POST)
public ResponseEntity<Void> createAgency(@RequestBody Agency agency, UriComponentsBuilder ucBuilder) {

    if(agencyService.isAgencyExists(agency)) {
        System.out.println("CONFLICT");
        return new ResponseEntity<Void>(HttpStatus.CONFLICT);
    }

    agencyService.saveAgency(agency);

    HttpHeaders headers = new HttpHeaders();
    headers.setLocation(ucBuilder.path("/agency/{id}").buildAndExpand(agency.getId()).toUri());
    return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
}

Note: that when I debug, after the post method it does not continue to my get method.

There is no error in this, when I reload it gets all including the one I just created.

Thanks!

Upvotes: 1

Views: 560

Answers (1)

Maverick
Maverick

Reputation: 454

I think the create agency function call should be like below:

$scope.createAgency = function(agency) {
    AgencyService.createAgency(agency)
        .then(
                $scope.getAllAgencies,
            function(errReponse){
                console.error('Error while creating Agency.');
            }
        );
};

first parameter in then should be the function "$scope.getAllAgencies" instead you are passing the value the function returned "$scope.getAllAgencies()".

Upvotes: 4

Related Questions