如何将用户定义的对象从angularjs传递给REST服务

时间:2013-10-23 13:54:10

标签: java rest angularjs

我是Anuglar JS的新手,所以在回答这个问题时请记住这一点。我的目标是在oracle数据库中创建并持久保存新用户。我的前端是用AngularJS编写的。 REST服务(使用JERSEY)已经具有如下方法签名:

 @POST
 @Path("/create/{user}")
 public void createUser(@QueryParam("user") User user){ ...}

使用REST调用的AngularJS Factory如下所示:

angular.module('app.services', ['ngResource'])
.factory('User', function($resource) 
 {
   return 
   {
        createUser: $resource('/myurl/create/:user', {}, {
            query: {
                method: 'POST',
                params: {user: '@user'},
                isArray: false
            }
        })
   });

User.java具有以下属性:

private String firstName;
private String lastName;
private String email;

我相信上面的工厂设置正确。我已经验证了create user的后端REST服务也能正常工作。前端有一个表单,允许用户输入FirstName,LastName和Email,它们应该是User对象的一部分。我认为User对象应该通过以下内容提交给Rest服务:

步骤1:使用用户的数据创建一个对象 第2步:User.createUser.query(用户:)

我不确定步骤是否正确,如果它们是如何制作对象的话。有人可以提供一些指导。谢谢

2 个答案:

答案 0 :(得分:0)

QueryParam通常与GET方法一起使用来发送单个属性,试试这个:

在你的java代码中

 @POST
 @Path("/create/")
 public void createUser(User user){ ...}

在你的js代码中

angular.module('app.services', ['ngResource'])
.factory('User', function($resource){

    var user = $resource('/myurl/create/', {}, {
      createUser: {method:'POST', params:{...}}
    });

    return user;        
});

您可以在java herehere中找到有关休息的更多信息,关于角度资源here

答案 1 :(得分:0)

您的资源应该反映的是对象而不是操作,您的资源应该被称为“用户”。创建,更新,查询反映在http方法中。

我会实现这样的事情。其中很大一部分直接取自文档 - http://docs.angularjs.org/api/ngResource。$ resource

angular.module('app.services', ['ngResource'])

.controller('MyController', function(User) {

    // Query userID 123, change the firstname and lastname then save.
    var user = User.get({userId:123}, function() {
      user.firstname = "joe";
      user.lastname = "bloggs";
      user.$save();
    }

   // Create a new user like this.
   var anotherUser = new User({
     username: 'joe.bloggs',
     email: 'joe.bloggs@example.com',
     firstname: 'joe',
     lastname: 'bloggs'
   });

   anotheruser.$save();
 })    

.factory('User', function($resource) 
 {       
    // Represent the user resource.
    return $resource('/myurl/create/:userId', {userId:'@id'});    

 });