【问题标题】:How to pass form parameters to Rest using angularjs services?如何使用 angularjs 服务将表单参数传递给 Rest?
【发布时间】:2016-04-21 14:52:33
【问题描述】:

我尝试将表单参数传递给 java rest 后端,但我不能。

控制器

$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
         ...
    }
}

我无法通过 Angular 将 html 表单参数传递给 java rest 后端。还尝试将@FormParam 更改为@QueryParam,但没有成功。

【问题讨论】:

  • 在你的http请求中使用data而不是params
  • 这是使用 $resource 和 params 进行发布请求的错误方式吗? @messerbill
  • 不,抱歉,不是。这是我的错……等一下
  • 浏览器控制台中的任何错误? HTTP 响应是什么样的?
  • 没有错误,它正确调用了我的后端函数但没有传递参数。

标签: javascript java angularjs rest


【解决方案1】:

您是否为$http POST 请求设置了默认content-type

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

【讨论】:

  • 我有这个$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';我现在正在尝试你的
【解决方案2】:

我不知道如何在java 中接收params 值,但我可以展示如何从角度service 传递params。当您想要传递参数时,您应该在 URL 路径中使用 :paramsName

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

如果你不在你的网址中使用/:name,你应该在你的标题中传递

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

注意:您的 Content-Type 应该是 application/json

【讨论】:

  • 如果服务 url 不等待 /path/addNew/{name} 等参数,这是正确的方法吗?
  • 那么你应该在header中传递params
【解决方案3】:

你可以试试这个:

控制器

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

  };
}]);

JAVA REST API

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

【讨论】:

    【解决方案4】:

    使用 jQuery 参数解决了我的问题

    这是正确的方法:

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

    我可以通过 $resource 服务传递这样的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多