【问题标题】:Post API doesn't give any reactPost API 没有任何反应
【发布时间】:2017-12-14 19:36:45
【问题描述】:

我正在使用 JHipster(Java,Spring Boot,Angular) 开发一个应用程序。 我有课程和学生实体。学生应在登录后点击注册按钮注册课程。 我写了post api并从swagger中测试了它。它工作正常。 但是当我尝试将其链接到带有 angular1 的按钮时;它会给出任何反应。

我的 Post API(我从 swagger 中测试它工作正常)

@PostMapping("/registercourse/{studentId}/{courseId}")
@Timed
public ResponseEntity<Void> registerCourse(@PathVariable Long studentId,@PathVariable Long courseId) {
    log.debug("REST request to register {} Course : {} Student : {}", courseId,studentId);
    courseRepository.registerCourse(studentId,courseId);
    return ResponseEntity.ok().headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, courseId.toString())).build();
}

course.register.states.js

(function() {
    'use strict';
angular
    .module('mucsApp')
    .config(stateConfig);

stateConfig.$inject = ['$stateProvider'];

function stateConfig($stateProvider) {
    $stateProvider
        .state('course.register', {
            parent: 'entity',
            url: '/registercourse/:studentid/:courseid',
            data: {
                authorities: ['ROLE_USER']
            },
            controller: function($scope, $stateParams) {
                $scope.studentid = $stateParams.studentid;
                $scope.courseid = $stateParams.courseid;
                $http({
                    method: 'POST',
                    url: 'http://localhost:8080/' + $scope.studentid + '/' + $scope.courseid,
                    headers: {
                        'Content-Type': 'application/json'
                    }
                }).then(function successCallback(response) {
                    console.log("GREAT");
                }, function errorCallback(response) {
                    console.log(response)
                });
            }
        });
}})();

course.register.service.js

(function() {
    'use strict';
    angular
        .module('mucsApp')
        .factory('CourseRegister', CourseRegister);

CourseRegister.$inject = ['$resource'];

function CourseRegister ($resource) {
    var resourceUrl =  'api/registercourse/:studentid/:courseid';

    return $resource(resourceUrl, {}, {
        'query': { method: 'POST', isArray: true},
        'save': {
            method: 'POST',
            transformRequest: function (data) {
                var copy = angular.copy(data);
                return angular.toJson(copy);
            }
        }
    });
}})();

我的html按钮:

<button type="submit"
        ui-sref="course.register({studentid:vm.mystudentid , courseid:course.id})"
        class="btn btn-info btn-sm">
    <span class="glyphicon glyphicon-eye-open"></span>
    <span class="hidden-sm-down">Kaydol</span>
</button>

【问题讨论】:

  • var resourceUrl = 'api/registercourse/:studentid/:courseid' 是否正确?如果您尝试使用 SoapUI 或 Postman 直接访问端点,完整的 URL 是什么?

标签: java angularjs spring rest jhipster


【解决方案1】:

你的 Spring 控制器正在寻找这个:

@PostMapping("/registercourse/{studentId}/{courseId}")

您的$http 电话正在发布到此:

url: 'http://localhost:8080/' + $scope.studentid + '/' + $scope.courseid

您需要将呼叫更改为:

url: 'http://localhost:8080/registercourse' + $scope.studentid + '/' + $scope.courseid

此外,您的控制器实际上并未使用您的CourseRegister。如果你想使用它,你需要在你的 AngularJS 控制器中注入它。:controller: function($scope, $stateParams,CourseRegister)

我的两分钱是,在你的情况下,你最好只使用$http。我会将 [更新] $http 调用放入您的 CourseRegister 服务中,然后使用它。 $resource 需要比我认为值得更多的修改。

更多关于 $resource 的信息是here

【讨论】:

  • 因为它是一个 JHipster 应用程序,url 应该以 /api 开头,但原始海报没有显示控制器类上的 RequestMapping。此外,角度应用程序与 API 来自同一来源,因此 url 不应包含 localhost 和端口,否则它将无法与 gulp 一起使用,它应以 '/api/registercourse' 开头
  • @GaëlMarziou 我更改了我的网址和单独的控制器,它工作正常!谢谢!
  • @GaëlMarziou 我保留了原来的 URL。我在不同的端口测试我的 FE/BE,所以我在开发过程中倾向于有这种东西。
  • @can ,根据 Gael 的 cmets,这有帮助吗?不知道我是否应该删除。
猜你喜欢
  • 1970-01-01
  • 2015-01-23
  • 2017-06-11
  • 2014-05-04
  • 2019-01-16
  • 2013-04-05
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
相关资源
最近更新 更多