【问题标题】:AngularJS - HTTP GET request with status code 302AngularJS - 状态码为 302 的 HTTP GET 请求
【发布时间】:2017-09-04 22:16:37
【问题描述】:

我正在使用 AngularJS 构建一个 RESTful API,但我被卡住了。我正在尝试发送一个 GET 请求,该请求将使用给定的username 获取User。代码如下:

var loginModule = angular.module('login-module', []);


    loginModule
        .factory('loginService',['$http','$rootScope', function($http){

            var factoryMethods = {};
            factoryMethods.login = function(username){
                return $http.get('http://localhost:8080/WebProjekat/webapi/users/'+username);
            }
            factoryMethods.setLoggedUser = function(user){
                $rootScope.loggedUser = user;
            }
            return factoryMethods;
        }])
        .controller('loginController', ['$scope', '$http','loginService', function ($scope, $http, loginService){
                $scope.username = '';
                $scope.password = '';

                $scope.user = {};

                $scope.userLogin = function(){
                    loginService.login($scope.username)
                            .then(function(response){

                                console.log("User :" +angular.toJson(response.data)+"successfully logged in!");
                                $scope.user = response.data;
                                loginService.setLoggedUser($scope.user);

                            },function(error){

                                console.log("Error occured durring user authentication!");

                            });
                }

        }]);

由于某种原因,这个函数产生的承诺:

factoryMethods.login = function(username){
                    return $http.get('http://localhost:8080/WebProjekat/webapi/users/'+username);
                }

被拒绝,我得到的状态码是 302。我不明白为什么会发生重定向,以及为什么数据映射到第二个回调函数,该回调函数在 promise 被拒绝时调用。

我遵循执行流程,Jersey Servlet 成功找到了UserResource 类和它需要调用的服务,以便获取具有给定用户名的用户。这是Java代码:

/**
     * URL: http://localhost:8030/WebProjekat/webapi/users/{userId}
     * @param username - identification of some user that is registered on the system
     * @param uriInfo - variable which can manipulate URL
     * @return user with the given username
     * @throws JsonParseException
     * @throws JsonMappingException
     * @throws IOException
     */
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/{userId}")
    public Response getUserById(@PathParam("userId") String username, @Context UriInfo uriInfo) throws JsonParseException, JsonMappingException, IOException {
        User user = new User();

        List<User> listOfUsers = userService.getAllUsers();
        if((user = userService.getUser(username, listOfUsers))!=null) {


            user.addLink(getUserSectionsUri(uriInfo, user), "sections");
            user.addLink(getSelfUri(uriInfo, user), "self");

            return Response.status(Status.FOUND)
                            .entity(user)
                            .build();
        }

        return Response.status(Status.NOT_FOUND)
                       .build();
    }

任何形式的帮助将不胜感激!

【问题讨论】:

    标签: javascript java angularjs rest


    【解决方案1】:

    您应该在 servlet 中返回 Status.OK (200) 而不是 Status.FOUND (302)

    【讨论】:

    • 哦!这太尴尬了:D 非常感谢你,我不知道我在看什么!
    • 不尴尬伙计,只是新人看的效果。发生在我身上很多次=)
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    相关资源
    最近更新 更多