1

我在发布 json 对象并将其与 Spring MVC 控制器中的 List 对象映射时遇到了麻烦。我有一个有几个复选框的表格。当用户检查和提交时,表单中的数据被反序列化,发送到 Spring MVC 控制器并映射到 List 类型对象。当用户选中两个或更多复选框时,它工作正常。但只有一个盒子,它没有。

当用户检查两个或更多时,数据将被反序列化,如下所示。

{"users":["137","138"]}

但是,当用户只选中一个复选框时,就像

{"users":"138"}

并返回 400 bad request 错误。

有什么解决方法或解决方案吗?

jQuery代码是:

$(document).ready(function() {
    $('#groupusers').submit(function() {
    var users = $(this).serializeObject();
    $.postJSON("${context}/admin/groups/${group.seq}/users", users, function(result) {
        ...
    });
    return false;
});

形式是:

<form id="groupusers" method="post" accept-charset="UTF-8" action="/" class="edit_group">
  ...
  <div id="users">
    <c:forEach var="user" items="${users}">
      <label><input id="users" name="users" type="checkbox" value="${user.seq}" /> ${user.firstName} ${user.lastName}</label><br>
    </c:forEach>
  </div>
</form>

映射到表单数据的列表对象:

public class AssignedUsers {
  private List<Long> users;
  ...
}

提前致谢。

4

2 回答 2

0

功能的实现是什么serializeObject()?您可能需要修改它以始终返回一个数组,因此即使您只选中一个框,该对象也应该是:{"users":["138"]}

服务器返回 400 可能是因为 Jackson 在后端抛出了解析异常。

于 2012-06-25T17:38:13.833 回答
0

Fojas 的 jQuery 序列化

这是我找到的解决方案,并且一直在使用它,它完全符合您的要求。

例子

HTML

<form id="myForm">
  <input name="data[]" value="some data"/>
  <input name="data[]" value="more data"/>

  <input name="users[]" value="137"/>
</form>

jQuery

$('#myForm').serializeObject();

输出

{
  data: ["some data", "more data"]
  users: [137]
}
于 2012-10-11T20:20:48.897 回答