2016-02-10 44 views
0

我必須說,AngularJS中完全是newbee。我想在我的應用程序中添加註冊選項。我有一些例子,我想添加註冊選項。 我做了這樣的事情:參數不從前端傳遞到後端

var services = angular.module('exampleApp.services', ['ngResource']); 


services.factory('UserService', function ($resource) { 

return $resource('rest/user/:action', {}, 
     { 
      authenticate: { 
       method: 'POST', 
       params: {'action': 'authenticate'}, 
       headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
      } 
     } 
); 
}); 


function LoginController($scope, $rootScope, $location, $cookieStore, UserService) { 

$scope.rememberMe = false; 

$scope.login = function() { 

    UserService.authenticate($.param({username: $scope.username, password: $scope.password}), function (authenticationResult) { 
     var authToken = authenticationResult.token; 
     $rootScope.authToken = authToken; 
     if ($scope.rememberMe) { 
      $cookieStore.put('authToken', authToken); 
     } 
     UserService.get(function (user) { 
      $rootScope.user = user; 
      $location.path("/"); 
     }); 
    }); 
}; 

$scope.register = function() { 
    $scope.user = new UserService(); 
    console.log($scope.user); 
    $scope.user.$save(function() { 
     $location.path('/'); 
    }); 

}; 

} ;

angular.module('exampleApp', ['ngRoute', 'ngCookies', 'exampleApp.services']) 
    .config(
      ['$routeProvider', '$locationProvider', '$httpProvider', function ($routeProvider, $locationProvider, $httpProvider) { 

        $routeProvider.when('/create', { 
         templateUrl: 'partials/create.html', 
         controller: CreateController 
        }); 

        $routeProvider.when('/login', { 
         templateUrl: 'partials/login.html', 
         controller: LoginController 
        }); 
     //more stuff here 

}); 

@Component 
@Path("/user") 
public class UserResource { 

    //some field here 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public User register(User user) { 
      return this.userDao.save(user); 
    } 

的事情是,我達到了在Java register方法處理,但我的用戶參數爲空。

我還試圖用:

@POST 
@Produces(MediaType.APPLICATION_JSON) 
public User register(@QueryParam("password") String password, @QueryParam("username") String username) { 

    return this.userDao.save(new User(username, password)); 
} 

$scope.register = function() { 
    $scope.user = new UserService(); 
    console.log($scope.user); 

    $http({ 
     url: 'user', 
     method: 'POST', 
     params: { 
      username: $scope.username, 
      password: $scope.password 
     } 
    }).success(function (data) { 
     $scope.persons = data; 
    }); 

}; 

但我已經收到

Failed to load resource: the server responded with a status of 404 (Not Found) 

在瀏覽器中。

回答

0

正確地從Angular.JS傳遞JSON有問題。

你不應該試圖序列JSON對象自己與$.params,傳遞對象是讓角處理它,而不是:

UserService.authenticate({username: $scope.username, password: $scope.password}, function (authenticationResult) { 

你應該正確地表明,你要發送JSON,不'application/x-www-form-urlencoded'

return $resource('rest/user/:action', {}, 
    { 
     authenticate: { 
      method: 'POST', 
      responseType: 'json', 
      params: {'action': 'authenticate'}, 
      headers: { 
       'Content-Type': 'application/json; charset=UTF-8' 
      } 
     } 
    } 

初始代碼的其餘部分看起來不錯,沒有必要@QueryParam在Java方面,你要發送和返回JSON,@QueryParam是當你insid發送PARAMS的情況下網址本身。

但有一件事。您正在對Angular.JS執行authenticate操作,但在Java方面,您有register操作。行動名稱應該明顯匹配。

+0

認證工作正常,我有註冊功能問題 – Araneo

相關問題