提交一个handontable到spring mvc3控制器 - 不支持内容类型'application / x-www-form-urlencoded'

时间:2013-05-09 19:14:52

标签: jquery spring-mvc handsontable

我对spring mvc3很新,我正在看一个jquery handontable示例。

这是我的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。再次,我很新,并已在这里坚持了一个星期:(

感谢所有帮助

2 个答案:

答案 0 :(得分: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 并添加消费 = MediaType.APPLICATION_FORM_URLENCODED_VALUE

回答Http Post request with content type application/x-www-form-urlencoded not working in Spring

答案 1 :(得分:0)

尝试

contentType: "application/json",

而不是

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

在你的jsp文件中。

希望这有帮助。