使用AngularJS和在OSGi环境(KARAF)中运行的CXF-JAXRS库,我试图让简单的API响应正常工作。
日志显示AngularJS正确连接到REST服务,并且正在使用200状态代码正确响应。但是,在AngularJS中,发回的信息无法被检索。
仅供参考:我不得不接受" http://"因为StackExchange告诉我,我没有足够的声誉来包含它们。但他们会在实际的代码/日志中出现。
REST方法I连接到
@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public Response test(){
String testResponse = "Success.";
Response responseString = Response
.status(200)
.entity(testResponse)
.build();
return responseString;
}
AngularJS控制器
app.controller('HttpController', function($scope, $http){
$http({
method: 'GET',
url: 'localhost:8181/cxf/strsoftware/test'
}).then(function successCallback(response){
$scope.testString = response.data;
}, function errorCallback(response){
$scope.testString = response;
});
$scope.validationString = "Controller is functional.";
});
<div ng-controller="HttpController">
The response is {{ testString }}<br>
{{validationString}}
在AngularJS HTML页面上显示
连接时显示KARAF日志
ID:20 地址:localhost:8181 / cxf / strsoftware / test Http-Method:GET 内容类型:
ID:20 响应代码:200 Content-Type:application / json 标题:{Content-Type = [application / json],Date = [Tue,2017年1月10日16:42:30 GMT]}
更新
通过在Chrome上打开Inspect页面(Ctrl + Shift + I)并点击&#39; Console&#39;,我们发现了以下错误:
angular.js:11756XMLHttpRequest无法加载localhost:8181 / cxf / strsoftware / test。交叉源请求仅支持协议方案:http,数据,chrome,chrome-extension,https,chrome-extension-resource。
这是服务器端错误,因此我们当前正在将CORS实施到服务器端以查看是否可以解决问题。发现解决方案后会发布。
答案 0 :(得分:1)
您正在.then()中调用匿名函数。 所以它应该是这样的:
$http({
method: 'GET',
url: 'localhost:8181/cxf/strsoftware/test'
}).then(function(response){
$scope.testString = response.data;
}, function(response){
$scope.testString = response;
});
答案 1 :(得分:1)
试试这个,如果没有工作替换数据:''与参数:{} :
$http({
method: 'GET',
url: 'localhost:8181/cxf/strsoftware/test',
// Just to be sure! maybe you don't need it
dataType: 'json',
headers: {
"Content-Type": "application/json"
},
//To be sure Angular does NOT remove the content-type header.
data: '',
}).then(function successCallback(response) {
$scope.testString = response.data;
}, function errorCallback(response) {
$scope.testString = response;
});
修改强>
查看此答案下方的评论,了解Shadmehr解决问题的位置。解决方案是将CORS过滤器实现到应用程序的服务器端部分。尝试访问API时,我们在浏览器中收到了Cross Region错误。
答案 2 :(得分:0)
不确定您的js代码是否正确。我还尝试了角度js,我的代码看起来像这样:
$http.get("/cxf/strsoftware/test")
.success(function (response) {$scope.testString = response.data;});
有关我的完整代码,请参阅blueprint-cdi-example。