为什么@RequestBody在这个SpringMVC Ajax表单中不能用于对象参数?

时间:2018-03-21 16:42:30

标签: spring spring-mvc

好奇的是,提交序列化表单的Ajax POST请求的以下SpringMVC处理程序不起作用并抛出“Unsupported Media Type”(415)。

@PostMapping("/myapp/add")
public boolean add(@RequestBody Person person) throws Exception { .. }

但是,将@RequestBody更改为@ModelAttribute后,它确实有效。

@PostMapping("/myapp/add")
public boolean add(@ModelAttribute Person person) throws Exception { .. }

我认为@RequestBody/@ResponseBody适合处理Ajax的SpringMVC方法,但@ModelAttribute用于常规表单提交。但是在这个Ajax POST请求中,@ModelAttribute可以正常工作。

从JS调用Ajax

$.ajax({
       type: "POST",
       url: '/myapp/add',
       data: $("#myform").serialize(), // serializes the form's elements
       dataType : "json"       
     })
     .done(function(data) {
         alert('Success!');
     });

有一个表格被序列化/提交,

<form:form id="myform" .. >
   <!-- .. -->
</form:form>

序列化DTO对象完全有效。它有一个空构造函数,并实现Serializable,并支持所有表单字段。

1 个答案:

答案 0 :(得分:1)

是Jquery?根据文档:.serialize()方法使用标准的URL编码表示法创建文本字符串。所以这不是JSON。

Serialize

也许你可以试试这个

data : JSON.stringify( $(myForm).serializeArray() );