我正在尝试使用我在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。
答案 0 :(得分:0)
您正在使用$http.post('rest/login/getCredentials',$scope.email)
,根据api post(url, data, [config]);
,您要发送emailId作为请求内容而不是请求参数。因此,当您使用@param时,您的控制器无法获取电子邮件地址。
您还可以检查浏览器中的网络标签,电子邮件地址将作为帖子正文内容而不是网址请求参数