从 angular 调用 Java EE 休息服务
Calling Java EE rest service from angular
我正在尝试从 Angular 工厂调用 JavaEE 6 休息服务,但我 运行 遇到了问题。
java 休息服务是由其他人创建的,我正在努力解决它,但我还不是非常精通 JavaEE,所以如果您需要更多信息,我'我会尽我所能。
@Path("bills")
public class BillResource {
@EJB
@Resource
private BillableEventBean billableEventBean;
private final BillableEventMapper billableEventMapper = new BillableEventMapper();
BillService implementation not working
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("query")
public List<BillableEventDuplicate> listBillableEvents(BillableEventQueryFilter queryFilter) {
List<BillableEvent> ejbRet = billableEventBean.listBillableEvents(queryFilter.getUserID(),
queryFilter.getBillingTeamID(), queryFilter.getBillStatus(), null);
List<BillableEventDuplicate> ret = billableEventMapper.toBillableEventDuplicateList(ejbRet);
return ret;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{billableEventI}")
public BillableEventDuplicate getBillableEvent(@PathParam("billableEventI") String id) {
BillableEvent ejbRet = billableEventBean.getBillableEvent(id);
BillableEventDuplicate ret = billableEventMapper.toBillableEventDuplicate(ejbRet);
return ret;
}
}
我的 angular 服务工厂如下所示:
'use strict';
var aumBills = angular.module('appBills', ['ngResource']);
appBills.factory('Bills', ['$resource',
function($resource)
{
return $resource('/ua_appcore/api/v1/bills/:billNumber',
{
billNumber:'@billNumber'
},
{
getList: {method: 'POST', params: {'userID':'ABC123'}, url: '/ua_appcore/api/v1/bills/query/'}
});
}]);
因此从控制器调用的工厂:
'use strict';
angular.module('app.bills', ['ngRoute','appBills'])
.config(['$routeProvider', function($routeProvider)
{
$routeProvider.
when('/bills',
{
templateUrl: 'bills/bill-list.html',
controller: 'BillListCtrl'
}).
when('/bills/:billId',
{
templateUrl: 'bills/bill-detail.html',
controller: 'BillDetailCtrl'
}).
when('/billsearch',
{
templateUrl: 'bills/bill-search.html',
controller: 'BillSearchCtrl'
});
}])
.controller('BillListCtrl', ['$scope', '$http', '$routeParams', 'Bills',
function($scope, $http, $routeParams, Bills)
{
Bills.getList({},{}).$promise.then(function(billList)
{
$scope.billList = billList;
});
}])
.controller('BillDetailCtrl', ['$scope', '$http', '$routeParams', 'Bills',
function($scope, $http, $routeParams, Bills)
{
Bills.get({},{billNumber: $routeParams.billNumber }).$promise.then(function(bill)
{
$scope.bill = bill;
});
}]);
据我所知,我需要在工厂中创建一个自定义操作以使用 URL
选项,因为有一个 POST
可以使用相同的根返回账单列表称呼。我遇到的问题是,即使使用 Consumes
注释,我似乎也无法将任何参数提供给 queryFilter
对象。我做错了什么吗?
首先,您可以使用 chrome 插件 Postman 检查您的休息服务是否正常工作,如果为真,则表明您的 angular $资源有问题。我认为您的请求中缺少 header "Content-Type=application/json"。我从来没有以这种方式使用 angular 你可以尝试创建这样的服务(this 教程应该也有帮助)
app.service("billsService", function ($resource) {
var bills = $resource("/ua_appcore/api/v1/bills/query");
this.getBills = function () {
var billsResource = new bills();
billsResource.sampleVar = 'value'; // here you can place your vars
return billsResource.$save();
}
});
所以,事实证明这一直是一个基础设施问题。我们一直在部署到 Websphere Liberty 服务器,它不包含 JavaEE 6 识别其余服务所需的整个 WebProfile。他们可能有一些解决方法,但最快的短期解决方案是 运行 用于部署的完整 Websphere 服务器。
感谢您的帮助!
我正在尝试从 Angular 工厂调用 JavaEE 6 休息服务,但我 运行 遇到了问题。
java 休息服务是由其他人创建的,我正在努力解决它,但我还不是非常精通 JavaEE,所以如果您需要更多信息,我'我会尽我所能。
@Path("bills")
public class BillResource {
@EJB
@Resource
private BillableEventBean billableEventBean;
private final BillableEventMapper billableEventMapper = new BillableEventMapper();
BillService implementation not working
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("query")
public List<BillableEventDuplicate> listBillableEvents(BillableEventQueryFilter queryFilter) {
List<BillableEvent> ejbRet = billableEventBean.listBillableEvents(queryFilter.getUserID(),
queryFilter.getBillingTeamID(), queryFilter.getBillStatus(), null);
List<BillableEventDuplicate> ret = billableEventMapper.toBillableEventDuplicateList(ejbRet);
return ret;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{billableEventI}")
public BillableEventDuplicate getBillableEvent(@PathParam("billableEventI") String id) {
BillableEvent ejbRet = billableEventBean.getBillableEvent(id);
BillableEventDuplicate ret = billableEventMapper.toBillableEventDuplicate(ejbRet);
return ret;
}
}
我的 angular 服务工厂如下所示:
'use strict';
var aumBills = angular.module('appBills', ['ngResource']);
appBills.factory('Bills', ['$resource',
function($resource)
{
return $resource('/ua_appcore/api/v1/bills/:billNumber',
{
billNumber:'@billNumber'
},
{
getList: {method: 'POST', params: {'userID':'ABC123'}, url: '/ua_appcore/api/v1/bills/query/'}
});
}]);
因此从控制器调用的工厂:
'use strict';
angular.module('app.bills', ['ngRoute','appBills'])
.config(['$routeProvider', function($routeProvider)
{
$routeProvider.
when('/bills',
{
templateUrl: 'bills/bill-list.html',
controller: 'BillListCtrl'
}).
when('/bills/:billId',
{
templateUrl: 'bills/bill-detail.html',
controller: 'BillDetailCtrl'
}).
when('/billsearch',
{
templateUrl: 'bills/bill-search.html',
controller: 'BillSearchCtrl'
});
}])
.controller('BillListCtrl', ['$scope', '$http', '$routeParams', 'Bills',
function($scope, $http, $routeParams, Bills)
{
Bills.getList({},{}).$promise.then(function(billList)
{
$scope.billList = billList;
});
}])
.controller('BillDetailCtrl', ['$scope', '$http', '$routeParams', 'Bills',
function($scope, $http, $routeParams, Bills)
{
Bills.get({},{billNumber: $routeParams.billNumber }).$promise.then(function(bill)
{
$scope.bill = bill;
});
}]);
据我所知,我需要在工厂中创建一个自定义操作以使用 URL
选项,因为有一个 POST
可以使用相同的根返回账单列表称呼。我遇到的问题是,即使使用 Consumes
注释,我似乎也无法将任何参数提供给 queryFilter
对象。我做错了什么吗?
首先,您可以使用 chrome 插件 Postman 检查您的休息服务是否正常工作,如果为真,则表明您的 angular $资源有问题。我认为您的请求中缺少 header "Content-Type=application/json"。我从来没有以这种方式使用 angular 你可以尝试创建这样的服务(this 教程应该也有帮助)
app.service("billsService", function ($resource) {
var bills = $resource("/ua_appcore/api/v1/bills/query");
this.getBills = function () {
var billsResource = new bills();
billsResource.sampleVar = 'value'; // here you can place your vars
return billsResource.$save();
}
});
所以,事实证明这一直是一个基础设施问题。我们一直在部署到 Websphere Liberty 服务器,它不包含 JavaEE 6 识别其余服务所需的整个 WebProfile。他们可能有一些解决方法,但最快的短期解决方案是 运行 用于部署的完整 Websphere 服务器。
感谢您的帮助!