我想发送用户的电子邮件以检查重复
这是我的后台控制器
@RequestMapping(value = "/api/v1/public/checkDuplicate", method = RequestMethod.POST)
public ResponseEntity<Object> getCnt(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value="usrEmail", required=false) String usrEmail){
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
这是我的前端控制器
$scope.user.usrEmail = $scope.usrEmail;
var req = {
method: 'POST',
url: './api/v1/public/checkDuplicate',
dataType: 'json',
headers: {
'Content-Type': 'application/json; charset=utf-8'
},
data: angular.toJson($scope.usrEmail)
};
这是我的观点
<input type="email" class="form-control" name="usr_Email"
ng-model="usrEmail" ng-required="true"
ng-keypress="checkDuplicate()">
当我使用&#39; console.log&#39;进行检查时,Front Controller可以正常收到用户的电子邮件。 但是在Back Controller中,RequestParam没有任何内容,只有没有错误代码的NULL,除了&#39; NullPointerException&#39;。
我认为这不是通讯错误。 我错过了什么吗? 谢谢!
答案 0 :(得分:1)
请阅读$http
配置对象的docs。对于关键数据,它说:
data – {string|Object}
- 要作为请求消息数据发送的数据。
这意味着data
可以是对象或字符串。在您的情况下,您将其作为字符串发送,这是有道理的,但您忘了提及其中的参数名称。代码中的data
应如下所示:
data: 'usrEmail=' + $scope.usrEmail // there is no need of angular.toJson here
这正确地将参数的名称表示为usrEmail
。但为了避免混淆,您始终可以使用对象来指定数据:
data: {
usrEmail: $scope.usrEmail
}
答案 1 :(得分:1)
从angularjs发送您的数据,如下所示
$scope.user.usrEmail = $scope.usrEmail;
var req = {
method: 'POST',
url: './api/v1/public/checkDuplicate',
dataType: 'json',
headers: {
'Content-Type': 'application/json; charset=utf-8'
},
data: {
'usrEmail' : $scope.usrEmail
}
};
当您从正文传递数据时,请使用RequestBody注释来获取电子邮件。并需要为用户创建一个Bean类。
@RequestMapping(value = "/api/v1/public/checkDuplicate", method = RequestMethod.POST)
public ResponseEntity<Object> getCnt(
HttpServletRequest request,
HttpServletResponse response,
@RequestBody User usrEmail){
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
或强>
如果您想使用PathVariable,则需要在angularjs中传递来自您网址的电子邮件。
url: './api/v1/public/checkDuplicate/'+$scope.usrEmail
然后您需要在控制器中use @PathValiable('usrEmail')
和@RequestMapping(value = "/api/v1/public/checkDuplicate/{usrEmail}"
答案 2 :(得分:1)
它在Back Controller中使用的@RequestParam
因为它与请求参数链接。它应该是@RequestBody
,它链接到HTTP请求正文。查看here了解详情。
现在您可以更改下面的代码 -
后退控制器
@RequestMapping(value = "/api/v1/public/checkDuplicate", method = RequestMethod.POST)
public ResponseEntity<Object> getCnt(
HttpServletRequest request,
HttpServletResponse response,
@RequestBody Object userReqObj){
HashMap<String, Object> userMap = (HashMap<String, Object>) userReqObj;
String userEmail = userMap.get("usrEmail");
//logic goes here...
}
前置控制器
var req = {
method: 'POST',
url: './api/v1/public/checkDuplicate',
dataType: 'json',
headers: {
'Content-Type': 'application/json'
},
data: {
'usrEmail' : $scope.usrEmail
}
};
答案 3 :(得分:0)
您没有在角度
中添加查询参数 url: './api/v1/public/checkDuplicate?**usrEmail='+$scope.usrEmail**
将此内容添加到您的代码中?usrEmail ='+ $ scope.usrEmail