AngularJS RESTful JSON请求与ngResource和Restangular

AngularJS RESTful JSON请求与ngResource和Restangular,rest,angularjs,jersey,Rest,Angularjs,Jersey,我对angularJS和REST请求/响应有一些问题。自从三周前我和AngularJS一起踢球,现在我想做一些很酷的事情。 首先,我创建了一个简单的jerseyREST服务,它返回一个简单的列表 @Path("/hello") public class Hello { @GET @Produces(MediaType.APPLICATION_JSON) public List<Medication> sayJsonHello() { List<Obj

我对angularJS和REST请求/响应有一些问题。自从三周前我和AngularJS一起踢球,现在我想做一些很酷的事情。 首先,我创建了一个简单的jerseyREST服务,它返回一个简单的列表

@Path("/hello")
public class Hello {


  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public List<Medication> sayJsonHello() {
      List<Object1> objs = new ArrayList<Object1>();

      objs.add(new Object1("1", "HUHU"));
      objs.add(new Object1("2", "HUHU 2"));

      return objs;
  }
}
我正在将webservice部署到Tomcat7实例中。现在,我想将这些数据输入我的Web应用程序。在阅读了一些教程和示例之后,我开始创建一些实现

在开始创建我的第一个服务后,我将此代码剪切到我的app.js中:

app.config(['$httpProvider', function ($httpProvider) {
    delete $httpProvider.defaults.headers.common["X-Requested-With"];
}]); 
这将从标头defauls中删除带有请求标头的X-Request-With

1。通过服务和ngResource请求

angular.module('helloService', ['ngResource']).
    factory('hService', function ($resource) {

        return $resource('http://localhost\\:8180/rest/hello',
            {callback: 'JSON_CALLBACK'}, {
                get: {method: 'GET', headers: [
                    {'Content-Type': 'application/json'},
                    {'Accept': 'application/json'}
                ]}
            });
    });
MyController:

function MyController($scope, hService) {
    hService.get(function(result){
        alert(" Result of helloService");
    }, function error(response){
        alert(" Error during helloService "+response.status);
    }); 
}
function MyRestangularCtr($scope, Restangular){

    var all = Restangular.all('hello');
    $scope.allObjects = all.getList();

    all.getList().then(function (hellos) {
        console.log("Result "+ hellos);
    }, function errorCallback(response) {
        alert("Oops error from server :( status" + response.status);
        console.log("status: "+response);
    });
}
如果尝试加载数据,“获取”函数将始终返回错误,并且状态始终为0

2。尝试使用Restangular

了解如何使用Restanglar后,我开始配置Restanglar:

app.config(function (RestangularProvider) {
    RestangularProvider.setBaseUrl('http://localhost\\:8180/rest');
});
并将RestangularProvider添加到my angular.module:

var app = angular.module("html5App", ['helloService', 'restangular', 'ngResource']);
MyController:

function MyController($scope, hService) {
    hService.get(function(result){
        alert(" Result of helloService");
    }, function error(response){
        alert(" Error during helloService "+response.status);
    }); 
}
function MyRestangularCtr($scope, Restangular){

    var all = Restangular.all('hello');
    $scope.allObjects = all.getList();

    all.getList().then(function (hellos) {
        console.log("Result "+ hellos);
    }, function errorCallback(response) {
        alert("Oops error from server :( status" + response.status);
        console.log("status: "+response);
    });
}
此处相同:无数据,状态为0。我不知道,为什么我不能从我的服务中获得任何数据。另外,我有时会遇到这样的错误:“错误:$摘要已在进行中”。我不确定问题出在哪里。如果jersey服务错误或不好,或者我的初学者JavaScript错误

第一种解决方案 客户端

angular.module('helloService', ['ngResource']).
    factory('hService', function ($resource) {

        return $resource('http://localhost\\:8180/rest/hello',
            {callback: 'JSON_CALLBACK'}, {
                get: {method: 'GET', headers: [
                    {'Content-Type': 'application/json'},
                    {'Accept': 'application/json'}
                ]}
            });
    });
角度请求应如下所示:

$scope.myData = $resource('http://localhost\\:8180/rest/:action',
    {action: 'hello', callback:'JSON_CALLBACK'},
    {get: {method: 'JSONP'}});
$scope.datas = $scope.myData.get();
该方法需要JSONP(GET仍将不起作用(因为CORPS没有repsonse数据?)

服务方

angular.module('helloService', ['ngResource']).
    factory('hService', function ($resource) {

        return $resource('http://localhost\\:8180/rest/hello',
            {callback: 'JSON_CALLBACK'}, {
                get: {method: 'GET', headers: [
                    {'Content-Type': 'application/json'},
                    {'Accept': 'application/json'}
                ]}
            });
    });
这里很重要的一点是,服务器还使用JSONPFOMAT进行响应,并可以处理回调请求

@GET
@Produces("application/x-javascript")
public JSONWithPadding sayJsonHello(@QueryParam("callback") String callback) {
    MyObjectList obList= new MyObjectList ();

    obList.getObjs().add(new MyObject(1, "HUHU"));
    obList.getObjs().add(new MyObject(2, "HUHU 2"));

    return new JSONWithPadding(obList, callback);
}
还不清楚
有没有办法将正常的json对象从服务器返回到客户端?

控制器的第一个参数不应该是$scope?也许这就是问题所在

function MyController($scope, hService) {

不幸的是,没有,相同的行为。有任何限制,我需要作为方法“JSONP”使用吗或者方法:“GET”对从RESTfull服务请求JSON数据也有效吗?什么是
\\\\\:8180
,控制台/网络怎么说?可能它与CORS有关。localhost\\\:8180是错误的为什么?$resource模块剥离端口:8888 from url Restangular:Restangular在内部使用$resource。$resource要求端口转义为非因此,使用端口设置baseUrl的正确方法如下:RestangularProvider.setBaseUrl(“\\:8080”);否则,请求将发送到我的tomcat服务器,而不是发送到我的tomcat服务器。关于:8180不应该是CORS问题,因为它是否是同一个域?不知道这是否仍然相关,但您是否尝试禁用web安全性