通过AJAX将数组传递到Spring MVC

5

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

java.lang.NumberFormatException: For input string: ""

我的用户类:

public class User
{
    @NotEmpty
    private String login;

    private List<Department> departments;
}

我的控制器:

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

我的 AJAX 请求(POST):

http://localhost:8080/myApp/user/save?departments%5B%5D=1&departments%5B%5D=3&id=&login=Test

我的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
    }
})

看起来 Spring 试图将参数 departments[] 的名称解析为带有值的参数,而不是使用该参数的值。

有人能帮我解决这个问题吗?


我怀疑“id”字段是问题的罪魁祸首。如果你看到在POST请求中“&id=&”,这意味着空字符串被传递作为id的值。如果id是整数类型(看起来是这样),那么就会抛出NumberFormatException异常。 - Prabhat
不,没关系。departments[] 出了问题。 - Vartlok
1个回答

4

我发现了一个错误,问题出在参数 departments[] 上。如果您在 jQuery AJAX 请求中使用 traditional: true,那么数组变量的名称中将不包含 [],并且 Spring 将其映射到 POJO 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接