我有两个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