2015-08-25 3 views
0

У меня есть странная проблема с передачей параметра Int в запросе POST на контроллер Spring MVC.ajax POST + параметр ошибки контроллера контроллера

Дело в том, что параметр передается через POST, но не анализируется контроллером.

Вот код: 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 *** 
} 

Пользователь:

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

Как отправить 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. Что может быть причиной этой проблемы?

+3

Может быть, ваш 'геттер/setter' для condo_id переменного не следует конвенциям номенклатуры, так condo_id не может сериализовать correclty. Не могли бы вы попробовать изменить эти методы для 'getCondo_id()' и 'setCondo_id (int condo_id)'? или изменение имени переменной из condo_id в condoId. – troig

+0

другое предположение - для класса пользователя может потребоваться конструктор по умолчанию. – freakman

+0

«Не могли бы вы попробовать изменить эти методы» изменить его на что? – user1935987

ответ

1

Ваша Пользовательская модель должна быть как

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

Он не нашел фактический метод установки, чтобы установить значение для свойства «condo_id».

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

По Яве природы, примитивное значение по умолчанию инициализируется в 0, так что печати 0

+0

'private Integer condo_id;' Объявить как 'Interger' то, что помогает :) – user1935987

+0

Когда вы определяете как' private Integer condo_id; ', если нет значения, приходящие на него, будут инициализированы нулевыми значениями, – ParagFlume

+0

Когда вы определяете как 'private int condo_id;', если нет значений, то он будет генерировать исключение, NULL не может быть присвоено первообразному типу – ParagFlume

Смежные вопросы