2014-10-07 61 views
0

我有两个angularjs服务,他们应该调用不同的restful服务(第一个检索单个用户,第二个返回用户数组)。为什么他们都在调用服务来获得大量用户?为什么我的两个不同的angularjs服务解析为相同的restful Java EE Web服务?

这里有两个angularjs服务:

angular.module('clearsoftDemoApp').factory('UserDetail', function ($resource) { 
return $resource('http://localhost:8080/ClearsoftDemoBackend/webresources/clearsoft.demo.users/:id', {}, { 
    find: {method: 'GET', params: {id: '@id'}}, 
    update: { method: 'PUT', params: {id: '@id'} }, 
    delete: { method: 'DELETE', params: {id: '@id'} } 
}); 

});

angular.module('clearsoftDemoApp').factory('Users', function ($resource) { 
return $resource('http://localhost:8080/ClearsoftDemoBackend/webresources/clearsoft.demo.users', {}, { 
    findAll: {method: 'GET', isArray: true} 
}); 

});

这里是从Java RESTful服务的相关代码:

@Stateless 
@Path("clearsoft.demo.users") 
public class UsersFacadeREST extends AbstractFacade<Users> { 
@PersistenceContext(unitName = "ClearsoftDemoBackendPU") 
private EntityManager em; 

public UsersFacadeREST() { 
    super(Users.class); 
} 

@GET 
@Path("{id}") 
@Produces({"application/xml", "application/json"}) 
public Users find(@PathParam("id") Integer id) { 
    return super.find(id); 
} 

@GET 
@Override 
@Produces({"application/xml", "application/json"}) 
public List<Users> findAll() { 
    return super.findAll(); 
} 

的问题是,当我运行此,既angularjs服务似乎调用的findAll()的Web服务,这是不是我的意图。

回答

1

$resource意味着从端点检索数据,操纵它并将其发回,并使用一组默认参数,这些参数可以在呼叫中明确覆盖。 只需使用AngularJS内部资源的匹配过程,而不是定义到种源的功能,即只定义了第一UserDetails资源,并呼吁http://localhost:8080/ClearsoftDemoBackend/webresources/clearsoft.demo.users的时候,那么你会得到所有用户加载。

为此,您需要将:id定义为可选参数。

一方面说明您可能需要添加[ngResource]模块,因此不要忘记包含它。

var service = angular.module("clearsoftDemoApp", ["ngResource"]); 
// UserDetail Resource 
service.factory('UserDetail', function ($resource) { 
    return $resource(
    '/ClearsoftDemoBackend/webresources/clearsoft.demo.users/:id', 
    {id: "@id" }, 
    { 
     find: {method: 'GET'}, 
     update: { method: 'PUT'}, 
     delete: { method: 'DELETE'} 
    }); 
}); 

以下代码段定义了一个UserDetail模块,让你火以下要求:

// Get all users 
var users = UserDetail.query(); // Calls: GET /ClearsoftDemoBackend/webresources/clearsoft.demo.users 

// Get user with iD 1 
var user = UserDetail.get({},{'id': 1}); // Calls: GET /ClearsoftDemoBackend/webresources/clearsoft.demo.users/1 

// Find user with iD 1 
var user = UserDetail.find({},{'id': 1}); // Calls: GET /ClearsoftDemoBackend/webresources/clearsoft.demo.users/1 
相关问题