2017-04-08 53 views
1

服務正在春天但當 我嘗試的角度來調用服務時,結果對象是空的,並沒有什麼返回如何從角度控制器的彈簧服務中獲得物體?

服務代碼:

公共類CalculatorController {

@CrossOrigin(origins = "http://localhost:8090") 
@GetMapping("/calc/{number1}/{number2}") 
public Calculator calc(@PathVariable int number1, 
      @PathVariable int number2){ 
     Calculator c = new Calculator(number1 , number2) ; 
    return c; 
} 

}

控制器js代碼:

angular.module("myApp", []) 
 
.controller("myCtrl", function($scope , $http) { 
 
    \t $http.get('http://localhost:8090/calc/5/8'). 
 
    \t then(function (response) 
 
    \t \t \t { $scope.result = response.data; }) ; 
 
    \t 
 
    }); 
 
    
 
    
 

的html代碼:

<!DOCTYPE html> 
 
<html ng-app="myApp"> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<head> 
 
\t \t <title>Hello AngularJS</title> 
 
\t \t <script src="moule.js"></script> 
 
</head> 
 

 
<body ng-app="myApp" ng-controller="myCtrl"> 
 
\t <div ng-controller="myCtrl"> 
 
\t <p><span class="add">add is {{ result.add }}</span></p> 
 
\t <span class="sub">sub is {{ result.sub }}</span> 
 
\t </div> 
 

 
</body> 
 
</html>

在此先感謝

+0

您的客戶端和服務器端都在不同的端口(不同的項目)? – Tom

+0

對不起的文章進行編輯 –

+0

是的它是不同的 –

回答

2

你CORS過濾器(@CrossOrigin)設置爲http://localhost:8090但好像這是你的服務器端代碼所在的位置。 CORS應允許服務器之外的源查詢您的API,這意味着您需要提供您的客戶端端口信息。

比方說在8090您的服務器端運行和您的客戶端8080。您在服務器端過濾器應允許8080使用API​​從瀏覽器。

嘗試改變CORS過濾器,以您的客戶端而不是服務器端匹配。

另外,請查看chrome調試工具(F12)以查看您是否有CORS異常。關於CORS

的更多信息:

  1. Cross-origin resource sharing
  2. Understanding CORS
  3. Enabling Cross Origin Requests for a RESTful Web Service
+0

對不起,但我不明白什麼是CORS過濾器.. –

+0

「@ CrossOrigin」註釋用於允許CORS - 「跨源資源共享」。瀏覽器將不允許您在域外使用API​​,除非CORS過濾器允許訪問它。所以這意味着如果你的客戶端運行在8080端口上,並且你試圖在端口8090上查詢你的服務器端代碼,並且服務器沒有返回正確的CORS頭文件,它將被丟棄,並且會顯示一個異常您的瀏覽器控制檯說明存在CORS錯誤。 – Tom

+0

端口8060上的角度工作服務器.. 和端口8090上的服務工作服務器.. 現在應該怎麼做? –

1

它應該是這樣的。你忘了添加@ResponseBody 標註爲你的方法

@CrossOrigin(origins = "http://localhost:8090") 
@GetMapping("/calc/{number1}/{number2}") 
@ResponseBody 
public Calculator calc(@PathVariable("number1") int number1, 
     @PathVariable("number2") int number2){ 
    Calculator c = new Calculator(number1 , number2) ; 
return c; 
} 
} 
+0

編譯器告訴我.. 該位置的註釋@RequestBody不允許 –

+0

抱歉。我修好了它。 '@ ResponseBody' –

+0

這不能解決問題..仍然對象是空的 –