2016-04-21 7 views
0

Ich versuche, meine Formularparameter an Java Rest Backend übergeben, aber ich kann nicht.Wie übergeben Sie Formularparameter an Rest mit angularjs services?

Controller

$scope.addNewThing = function() { 
    Myservice.addNew($scope.name); 
}; 

Service

addNew: function (name) { 
    var Foo = $resource($rootScope.baseUrl + '/path/addNew', {}, { 
      save: {method: 'POST', params: {}} 
    }); 

    var results = Foo.save({name: name}, function(data) { 
      results = data; 
    }); 

    return results; 
} 

//also tried this version of code 

addNew: function(name) { 

    return $resource($rootScope.baseUrl + '/path/addNew', {}, { 
     save: {method: 'POST', params: {name: 'test'}} 
    }); 
} 

Rest Backend-Funktion

@POST 
@Produces("application/json") 
@Path("/addNew") 
public Response addNew(@FormParam("name") String name) { 
    try { 
     //when i check name here it is always null 
     ... 
    } 
} 

I nicht die HTML-Formular-Parameter auf Java Rest Backend über Winkel passieren kann. Auch versucht, @FormParam zu @QueryParam zu ändern, aber es hat nicht funktioniert.

+0

Verwenden Sie 'Daten' statt' Params' innerhalb Ihrer HTTP-Anfrage – messerbill

+0

ist dies ein falscher Weg mit $ Ressource und Parameter für Post-Anfrage? @messerbill – cgrgcn

+0

keine Entschuldigung, es ist nicht. Das war meine Schuld ... warte einen Moment – messerbill

Antwort

0

Mit jQuery params mein Problem gelöst

Hier ist der richtige Weg:

Myservice.addNew().save($.param({ 
     name:$scope.name 
    }),function(data){ 
     console.log(data); 
    },function(err){ 
     console.log(err); 
    }); 

ich die Parameter wie diese mit $ resource passieren kann.

0

ich don'n wissen, wie params Wert in java erhalten, aber ich kann zeigen, wie params von Winkel service passieren. Wenn Sie Params übergeben möchten, sollten Sie :paramsName in Ihrem URL-Pfad verwenden.

addNew: function(name) { 
    var addNewItem = $resource($rootScope.baseUrl + '/path/addNew/:name', {name: '@name'}, { 
     'post': {method: 'GET'} 
    }); 
    return addNewItem.post({name: name}); 
} 

oder wenn Sie nicht /:name in Ihrer URL verwenden Sie sollten Sie in Ihrem Kopf passieren

addNew: function(name) { 
    var addNewItem = $resource($rootScope.baseUrl + '/path/addNew/:name', {}, { 
     'post': {method: 'GET', headers: { 'name': name }} 
    }); 
    return addNewItem.post({name: name}); 
} 

NB: Ihre Content-Type sein sollte application/json

+0

ist dies der richtige Weg, wenn die Service-URL nicht auf Parameter wie/path/addNew/{name} wartet? – cgrgcn

+0

dann sollten Sie 'params' Wert in' header' übergeben –

0

Haben Sie den Standard festgelegt content-type auf $http POST Anfragen?

app.config(function($httpProvider) { 
    $httpProvider.defaults.headers.post = {}; 
    $httpProvider.defaults.headers.post["Content-Type"] = "application/json; charset=utf-8"; 
}); 
+0

ich habe dieses '$ http.defaults.headers.post ['Content-Type'] = 'application/x-www-form-urlencoded; charset = UTF-8 '; 'Ich versuche deine jetzt – cgrgcn

+0

funktioniert auch nicht – cgrgcn

0

Sie können dies versuchen:

CONTROLLER

$scope.addNewThing = function() { 
    yourService.addNew($scope.name); 
}; 

SERVICE

angular.module('MyApp') 
    .service('yourService',['$http', function ($http) { 

    this.addNew = function (data) { 

    $http({ 
      url: 'YourURL', 
      method: 'POST', 
      data: data, // your $scope.name 
      headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
     }) 
     .success(function (response) { 
     console.log('good'); 
     }) 
     .error(function (response) { 
     console.log('error'); 
     }); 

    }; 
}]); 

JAVA-REST-API

@POST 
@Path("/addNew") 
@Consumes("*/*") 
public Response addNew(String name) { 
    // use here your String name 
} 
Verwandte Themen