为什么我的两个不同angularjs服务解析为同一个restful Java EE web服务



我有两个angularjs服务,它们应该调用不同的restful服务(第一个检索单个用户,第二个返回用户数组)。为什么他们都调用该服务来获取用户数组?

以下是两个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服务,这不是我的意图。

$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

最新更新