Angularjs不良请求(400)

时间:2016-03-11 01:32:17

标签: angularjs spring

我正在尝试使用我在Spring API中创建的REST服务,当我使用Swagger测试它时,它的行为符合预期,但是当我尝试在我的UI中使用它时,我得到了一个:

 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;

}

浏览器的调试器仅将请求有效负载显示为:'somemail@mail.com'

我想知道是否有人可以指出我正确的方向,我很确定这一定是一个非常愚蠢的错误。

编辑:从@Param改为Body为lols而且它有效,但我仍然想知道为什么它不适用于Param。

1 个答案:

答案 0 :(得分:0)

您正在使用$http.post('rest/login/getCredentials',$scope.email),根据api post(url, data, [config]);,您要发送emailId作为请求内容而不是请求参数。因此,当您使用@param时,您的控制器无法获取电子邮件地址。

您还可以检查浏览器中的网络标签,电子邮件地址将作为帖子正文内容而不是网址请求参数