通过 AJAX 将数组传递到 Spring MVC

Var*_*lok 5 ajax jquery spring spring-mvc

我正在研究 spring mvc 应用程序,我应该基于 Spring MVC 验证器进行验证,但验证但 AJAX 请求。因此,当我只发送单个数据时,一切正常,Spring 会将数据从请求映射到对象并对其进行验证。但是当我添加新的数组参数时,Spring 会抛出一个异常:

java.lang.NumberFormatException: For input string: ""
Run Code Online (Sandbox Code Playgroud)

我的用户类:

public class User
{
    @NotEmpty
    private String login;

    private List<Department> departments;
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

@Controller
public class UserController
{
    @RequestMapping(value = "/save")
    public ModelAndView save(@Valid @ModelAttribute("user") final User user,
            BindingResult result) throws Exception
    {
       // do action
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 AJAX 请求(POST):

http://localhost:8080/myApp/user/save?departments%5B%5D=1&departments%5B%5D=3&id=&login=Test
Run Code Online (Sandbox Code Playgroud)

我的 JS(jQuery):

var form = $('.add-form');
var fields = form.find('input');
var data = {};
// get valud from input fields
for (var i = 0; i < fields.length; i++) {
    var $item = $(fields[i]);
    data[$item.attr('name')] = $item.val();
}
// get value from list as array
data['departments'] = form.find('#departmentsSelector').val();
$.ajax({
    type: "POST",
    url: "user/save",
    data: data,
    success: function(response){
        // do something
    }
})
Run Code Online (Sandbox Code Playgroud)

看起来 Spring 正在尝试将参数名称解​​析departments[]为带有值的参数,而不是使用此参数的值。

谁能帮我这个?

Var*_*lok 4

所以,我发现了一个错误,问题出在[]参数上departments。如果您用于traditional: truejQuery AJAX 请求,则数组变量将不会包含[]在名称中,并且 Spring 将其映射到 POJO 中。