2014-07-15 18 views
0

我想從Angular-JS頁面的Java後端調用REST服務。我可以成功獲取GET數據,但無法調用@POST資源。

例如在Java後端這裏是我的RESTful服務方法 -

@POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public User create(User user) { 
     User usr1 = new User(); 
     usr1.setId(3); 
     usr1.setFirstName("John"); 
     usr1.setLastName("Paul"); 

     return usr1; 
    } 

在AngularJS部分這裏是服務工廠:

var app = angular.module('app', ['ngResource']); 

app.factory('UsersFactory', function ($resource) { 
    return $resource('http://localhost:8080/demoApp/service/users', {}, { 
     query: { method: 'GET', isArray: true }, 
     create: { method: 'POST'} 
    }) 
}); 

這裏是AngularJS控制器:

app.controller('userCreationCtrl', ['$scope', 'UsersFactory', '$location', 
    function ($scope, UsersFactory, $location) { 

     $scope.createNewUser = function() {   
      UsersFactory.create($scope.user);    
     } 
    }]); 

錯誤顯示在Chrome瀏覽器的Javascript控制檯 -

XMLHttpRequest cannot load http://localhost:8080/demoApp/service/users. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. 
+0

它是一個CORS問題,但你說GET可以工作,所以你必須已經部分安裝了CORS。我遇到了同樣的問題(CORS在GET請求中工作,但不是在POST請求中),我使用的是第三方CORS過濾器,我無法正常工作。你在使用哪臺服務器?如果它是Tomcat,它有它自己的CORS過濾器,它工作得非常好。 – Gimby

回答

0

你的問題,是因爲在服務休息,你可以允許讓CORS所以你必須更改或添加在服務器端更改一些配置中,或者更簡單的辦法就是把html代碼在同URL,它是你的服務器爲localhost:8080(你有你的HTML代碼在本地主機:63342)

在你的服務器端,您必須添加「訪問控制允許來源= *」或類似的東西

+0

response.setHeader(「Access-Control-Allow-Origin」,「*」); (「Access-Control-Allow-Methods」,「POST,PUT,GET,OPTIONS,DELETE」); 請建議還有什麼要做。 –

+0

但你在響應中看到這個?用firefox或chrome的調試控制檯看到它 – nicearma

+0

看看這個開源實現: https://github.com/ebay/cors-filter(apache許可) 特別看看高級配置示例。對我來說,這是一個可靠的解決方案,因爲我最近遇到了同樣的問題。在某些情況下,一個簡單的過濾器實現似乎不起作用,尤其是在處理預先發送的請求時。關於CORS的非常好的文檔可以在這裏找到 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS –

相關問題