当前位置: 首页 > 知识库问答 >
问题:

提交一个Handsontable到一个Springmvc3控制器-不支持内容类型'应用程序/x-wow-form-urlencoded'

茹元魁
2023-03-14

我是Springmvc3的新手,正在看一个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}";
    }

类:

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个答案

柴嘉年
2023-03-14

尝试

contentType:“应用程序/json”,

而不是

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

在你的jsp文件中。

希望这有帮助。

颜举
2023-03-14

问题是,当我们使用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和add consumes=MediaType。应用程序\u表单\u URL编码\u值

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

 类似资料: