2015-11-19 4 views
2

Я новичок в AngularJS и Spring MVC. Я пытаюсь вызвать службу REST из AngularJS и проверить учетные данные для входа в систему.Как передать значение от AngularJS до контроллера REST Spring

Я не уверен, что я пытаюсь передать параметр правильно, чтобы передать его контроллеру. Пожалуйста, может кто-то наставит меня, если я пропускаю любые

Controller.js

var SupportSystems = angular.module('SupportSystems', [ 'ngResource' ]); 
SupportSystems 
     .controller(
       'LoginController', 
       function($scope, $resource) { 
        $scope.authenticate = function() { 
         var authenticateUser = $resource('http://localhost:8080/SupportSystems/SSystems/authenticateUser/:userName', {userName: '@userName'}); 
         authenticateUser.save(function(data) { 
          alert("user->" + $scope.userName); 
          alert("pass->" + $scope.password); 
         }); 
        } 
       }); 

Спринг контроллер

@RequestMapping("/SSystems") 
public class SupportSystemsController { ` 

    @RequestMapping(value="/authenticateUser/{userName}", method=RequestMethod.POST) 
    public ResponseEntity<Boolean> authenticateUser(@RequestParam("userName") String userName) { 
     System.out.println("username -->" + userName); 
     return new ResponseEntity<Boolean>(Boolean.TRUE, HttpStatus.OK); 
    } 

Ошибка: Обязательный параметр Строка 'Username' нет.

Мне нужно передать значение имени пользователя и пароля контроллеру Spring. Я пытаюсь использовать @RequestParam

<body ng-controller="LoginController"> 

<form class="login-form" name="loginForm" ng-submit="authenticate()">  
    <h2> Login</h2> 
    <input type="text" id="userName" class="form-control" name="userName" required autofocus="autofocus" 
    ng-model="userName" /> 

ответ

1

Ответ на исходный вопрос: Вы должны использовать @PathVariable instread из @RequestParam

внушения: Я предлагаю вам представить данные username и password, как тело запроса POST.

Как отправить POST запрос с $http:

$scope.authenticate = function() { 
    var data = { 
     username: $scope.username, 
     password: $scope.password 
    }; 

    var successCallBack = function(response){ 
     // success response found from server 
    }; 

    var errorCallBack = function(response){ 
     // error response found from server 
    }; 

    $http.post('http://localhost:8080/SupportSystems/SSystems/authenticateUser', data).then(successCallBack, errorCallBack); 
} 

Как обработать весной контроллер:

@RequestMapping(value="/authenticateUser", method=RequestMethod.POST) 
public ResponseEntity<?> authenticateUser(@Valid @RequestBody AuthenticateUserRequest request) { 

    // check the submitted username and password 
    if(request.getUserName().equals("nayan") && request.getPassword().equals("pass")){ 
     return new ResponseEntity<>(null, HttpStatus.OK); 
    } else { 
     return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); 
    } 
} 

Ваш AuthenticateUserRequest класс может выглядеть следующим образом:

public class AuthenticateUserRequest { 

    @NotNull 
    private String username; 

    @NotNull 
    private String password; 

    public String getUsername(){return this.username;} 
    public void setUsername(String username){this.username = username;} 
    public String getPassword(){return this.password;} 
    public void setPassword(String password){this.password = password;} 

} 

Примечания:

  1. @Valid аннотация не обязательна. Если он присутствует, он гарантирует, что username и password должны быть отправлены на контроллер. @NotNull аннотация проверяет эту валидацию.
  2. В большинстве случаев вы будете соответствовать представленным username и password значениям со значениями из вашей базы данных. Я пропустил это, чтобы все было просто.
+0

Я использовал $ http ниже и смог получить значения. Можете ли вы объяснить подробнее о полезной нагрузке \t \t \t \t \t \t Var данных = 'Username =' + $ scope.userName + '& пароль =' + $ scope.password; \t \t \t \t \t $ http.post ('HTTP: // локальный: 8080/SupportSystems/SSystems/authenticateUser', данные) – CrazyMac

+0

Я обновил ответ с некоторыми примерами кода. Надеюсь, это поможет вам. – Nayan

Смежные вопросы