【发布时间】:2015-08-25 08:16:36
【问题描述】:
我在将 POST 请求中的 Int 参数传递给 Spring MVC 控制器时遇到了奇怪的问题。
问题是一个参数通过POST传递,但没有被控制器解析。
代码如下: 弹簧控制器:
@Controller
@RequestMapping("user")
public class UserController {
@RequestMapping(value = "/register", method = RequestMethod.POST)
@ResponseBody
public JsonResponse AddUser(@RequestBody User user){
System.out.println(user.getCondoID());
System.out.println(user.getPassword());
System.out.println(user.getUsername());
*** SOME MY STUFF ***
}
用户模型:
public class User {
private String username;
private String password;
private int condo_id;
private List<String> roles;
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getCondoID() {
return condo_id;
}
public void setCondoID(int condo_id) {
this.condo_id = condo_id;
}
}
我如何在 Angular 中发送 POST(示例):
$scope.choosenCondo.id = "7";
var formData = {
"username" : $scope.registerUser.email,
"password" : $scope.registerUser.password,
"condo_id" : parseInt($scope.choosenCondo.id)
};
var req = {
method: 'POST',
url: '/api/user/register',
headers: {
'X-CSRF-TOKEN': $('input[name="_csrf"]').val(),
'Upgrade-Insecure-Requests': "1",
//'Content-Type': "application/x-www-form-urlencoded"
'Content-Type': 'application/json'
},
data: formData
}
$http(req)
所以,对于System.out.println(user.getCondoID());,我在日志中收到“0”。
但是 POST 数据看起来像这样,例如:{"username":"4t654y54y54y","password":"1q2w3e","condo_id":2}
所以参数是在 POST 中发送的。造成这种麻烦的原因是什么?
【问题讨论】:
-
也许您的 condo_id 变量的
getter/setter没有遵循命名约定,因此 condo_id 无法正确序列化。您可以尝试为getCondo_id()和setCondo_id(int condo_id)更改这些方法吗?或将变量名从 condo_id 更改为 condoId。 -
另一种猜测——用户类可能需要默认构造函数。
-
“你能不能试试改变这些方法”改成什么?
-
getCondoID()->getCondo_id()和setCondoID(int condo_id)->setCondo_id(int condo_id). -
为您的变量/方法使用正确的驼峰式。
int condo_id将变为Integer condoId(更喜欢使用对象而不是原语)。接下来让您的 IDE 生成 getter/setter。
标签: java ajax angularjs spring spring-mvc