3

我是 spring mvc3 的新手,我正在查看一个 jquery handsontable 示例。

这是我的jsp页面的一部分,其中包括表单

  <form:form action="${pageContext.request.contextPath}/app/${application.id}/user/bulkImport" method="POST">   
        <div id="dataTable"></div>
        <script>
            var data = [
                ["156428", "admin,SCC,Superuser"],
                ["839302", "SCC"]
            ];
            $("#dataTable").handsontable({
                data: data,
                startRows: 3,
                startCols: 2
            });
</script>   
   <script>
   function submitEntries(){
        alert("in");
            var tableData = $("#dataTable").handsontable("getData");
            var formDataJson = JSON.stringify({"data":tableData});
             jQuery.ajax({
                url: 'bulkImport',
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                data: formDataJson,
                'success': function (e) {
                    var resultString = 'saved';
                    $('#serverResults').html(resultString);
                }
            });
   }
    </script>

控制器:

@RequestMapping(value="/bulkImport", method = RequestMethod.POST)
    public String importUsers(@RequestBody BulkUserImportEntries entries)
            throws Exception {

        Iterator itr = entries.getData().iterator();
        while(itr.hasNext()) {
            Object obj = (Object)itr.next();
        }

        return "redirect:/app/{appId}/user/{id}";
    }

BulkUserImportEntries 类:

public class BulkUserImportEntries implements Serializable{ 
      private List<Object[]> data;

      protected BulkUserImportEntries() {}
      protected BulkUserImportEntries(List<Object[]> data) {
            this.data = data;
      }

      public List<Object[]> getData() {
            return data;
      }
}

我在提交表单时收到此错误。

不支持内容类型“application/x-www-form-urlencoded”

我想从我的 jsp 中接收值数组,以便能够在控制器上对其进行迭代。我在示例中看到这是可能的,但这是使用 modelAttribute 。我又是一个很新的人,现在已经在这里呆了一个星期了:(

感谢所有的帮助

4

2 回答 2

1

问题是当我们使用application/x-www-form-urlencoded时,Spring 不会将其理解为 RequestBody。因此,如果我们想使用它,我们必须删除@RequestBody注释。

然后尝试以下操作:

@RequestMapping(value="/bulkImport", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String importUsers(BulkUserImportEntries entries) throws Exception {

    Iterator itr = entries.getData().iterator();
    while(itr.hasNext()) {
        Object obj = (Object)itr.next();
    }

    return "redirect:/app/{appId}/user/{id}";
}

请注意,删除了注释@RequestBody并添加了consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE

答案内容类型为 application/x-www-form-urlencoded 的 Http Post 请求在 Spring 中不起作用

于 2016-07-07T19:07:35.080 回答
0

尝试

contentType: "application/json",

代替

headers: {
  'Content-Type': 'application/json'
},

在你的jsp文件中。

希望这可以帮助。

于 2013-05-11T02:25:09.947 回答