如何从角度控制器的弹簧服务中获取对象?

时间:2017-04-08 19:00:11

标签: html angularjs spring

服务正在春天工作但是什么时候 我尝试以角度调用服务,结果对象为空并且不返回任何内容

服务代码:

公共类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) {
    	$http.get('http://localhost:8090/calc/5/8').
    	then(function (response)
    			{ $scope.result = response.data; }) ;
    	
    });
    
    
    

html代码:

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

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

</body>
</html>

提前致谢

2 个答案:

答案 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

答案 1 :(得分: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;
}
}