2016-03-11 4 views
0

Я пытаюсь использовать службу REST, которую я создал в API Spring, когда я тестирую ее с помощью Swagger, она ведет себя так, как ожидалось, но при попытке использовать ее из моего пользовательского интерфейса я получаю:Angularjs Bad Request (400)

rest/login/getCredentials 400 (Bad Request) 

Я обычно использую @RequestBody, но в данном случае я использовал @RequestParam, что может быть источником проблем? Когда я вызываю службу из UI нить, кажется, останавливается на контроллере и единственное, что консоль показывает меня:

2016-03-10 19:15:02.997 INFO 8852 --- [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization started 
2016-03-10 19:15:03.016 INFO 8852 --- [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 19 ms 

JS

$scope.recoverPassword = function(){ 


    $http.post('rest/login/getCredentials',$scope.email).success(function (loginResponse) { 

     if(loginResponse.code == 200){ 
     alert(loginResponse.codeMessage); 

     }else{ 
     alert(loginResponse.codeMessage); 
     } 

     $scope.showLogin = true; 

    }); 

    }; 

Контроллер

@RequestMapping(value = "/getCredentials", method = RequestMethod.POST) 
@Transactional 
public LoginResponse getCredentials(@RequestParam("email")String email){ 

    LoginResponse response = new LoginResponse(); 
    Boolean state = loginService.getCredentials(email); 

    if(state){ 
     response.setCode(200); 
     response.setCodeMessage("Credentials send, please check your email."); 
    }else{ 
     response.setCode(401); 
     response.setCodeMessage("Invalid email."); 
    } 

    return response; 

} 

Отладчик браузера показывает только полезную нагрузку запроса: «[email protected]»

Мне было интересно, может ли кто-нибудь указать мне в правильном направлении, я уверен, что это должно быть очень глупо ошибочно.

EDIT: Изменен от @Param to Body для lols, и это сработало, но я бы хотел знать, почему он не работает с Param.

ответ

0

Вы используете $http.post('rest/login/getCredentials',$scope.email), согласно api post(url, data, [config]);, вы отправляете emailId как содержимое запроса, а не как параметр запроса. Таким образом, вы не получаете адрес электронной почты при использовании @param.

Вы также можете проверить вкладку сети в браузере, адрес электронной почты идет как содержимое сообщения, а не как запрос URL-адреса.