简体   繁体   English

ajax POST + spring控制器参数传递错误

[英]ajax POST + spring controller parameter passing error

I have strange problem with passing an Int param in POST request to the Spring MVC controller. 我在POST请求中将Int参数传递给Spring MVC控制器时遇到了一个奇怪的问题。

The thing is that a parameter is passed through POST, but didn't parsed by the controller. 问题是参数是通过POST传递的,但没有被控制器解析。

Here is the Code: Spring Controller: 这是代码: Spring Controller:

@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 ***
}

User model: 用户模型:

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;
    }
}

How do i send POST in Angular(example): 如何在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)

So, for System.out.println(user.getCondoID()); 因此,对于System.out.println(user.getCondoID()); i receive "0" in log. 我在日志中收到“ 0”。 But the POST data looks like this for example: {"username":"4t654y54y54y","password":"1q2w3e","condo_id":2} so the param is sent in POST. 但是POST数据看起来像这样: {"username":"4t654y54y54y","password":"1q2w3e","condo_id":2}因此,参数在POST中发送。 What can be a reason of this trouble? 造成这种麻烦的原因是什么?

Your User Model should be like 您的用户模型应该像

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 getCondo_id() {
        return condo_id;
    }

    public void setCondo_id(int condo_id) {
        this.condo_id = condo_id;
    }

    /*
    public int getCondoID() {
        return condo_id;
    }
    public void setCondoID(int condo_id) {
        this.condo_id = condo_id;
    }
    */
}

It didn't find the actual setter method to set the value for the property "condo_id". 它没有找到设置属性“ condo_id”的值的实际设置方法。

So, for System.out.println(user.getCondoID()); i receive "0" in log. 

By java nature, primitive value default initialized to 0, so it is printing 0 根据Java的性质,原始值默认初始化为0,因此它输出0

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM