Как передать параметры формы в Rest с помощью сервисов angularjs?

0

Я пытаюсь передать свои параметры формы в java rest backend, но я не могу.

контроллер

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

оказание услуг

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'}}
     });
}

функция остаточного бэкэнд

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

Я не могу передать параметр формы html в базу данных java restain через угловой. Также попытался изменить @FormParam на @QueryParam но он не сработал.

  • 0
    используйте data вместо params внутри вашего http-запроса
  • 0
    это неправильный способ использования $ resource и params для пост-запроса? @messerbill
Показать ещё 6 комментариев
Теги:
rest

4 ответа

0
Лучший ответ

Использование параметров jQuery решило мою проблему

Вот правильный способ:

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

Я могу передать такие параметры с помощью $ resource service.

0

Я не знаю, как получить значение params в java но я могу показать, как передавать params из углового service. когда вы захотите передать параметры, вы должны использовать :paramsName в URL-адресе.

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

или если вы не используете /:name в своем URL-адресе, вы должны передать свой заголовок

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

NB: ваш Content-Type должен быть application/json

  • 0
    это правильный путь, если URL службы не ожидает параметры, такие как / путь / addNew / {имя}?
  • 0
    тогда вы должны передать значение params в header
0

Вы можете попробовать следующее:

КОНТРОЛЛЕР

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

ОКАЗАНИЕ УСЛУГ

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');
      });

  };
}]);

API JAVA REST

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

Вы задали content-type по умолчанию в запросах $http POST?

app.config(function($httpProvider) {
    $httpProvider.defaults.headers.post = {};
    $httpProvider.defaults.headers.post["Content-Type"] = "application/json; charset=utf-8";
});
  • 0
    у меня есть этот $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; я пытаюсь твой сейчас
  • 0
    не работает также

Ещё вопросы

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