【问题标题】:Calling Java EE rest service from angular从角度调用 Java EE 休息服务
【发布时间】:2015-10-27 19:33:08
【问题描述】:

我正在尝试从 Angular 工厂调用 JavaEE 6 休息服务,但遇到了问题。

java rest 服务是由其他人创建的,我正在努力解决它,我还不是非常精通 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;
}
}

我的服务角度工厂如下所示:

'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 对象中。我做错了什么?

【问题讨论】:

    标签: java angularjs rest java-ee-6


    【解决方案1】:

    首先,您可以使用 chrome 插件 Postman 检查您的休息服务是否正常工作,如果您的角度 $resource 存在问题。在我看来,您的请求中缺少标题“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();
        }
    });
    

    【讨论】:

      【解决方案2】:

      因此,事实证明这一直是基础架构问题。我们一直在部署到 Websphere Liberty 服务器,它不包含 JavaEE 6 识别其余服务所需的整个 WebProfile。他们可能有一些解决方法,但最快的短期解决方案是运行完整的 Websphere 服务器进行部署。

      感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 2019-03-12
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多