好奇的是,提交序列化表单的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,并支持所有表单字段。
答案 0 :(得分:1)
是Jquery?根据文档:.serialize()方法使用标准的URL编码表示法创建文本字符串。所以这不是JSON。
也许你可以试试这个
data : JSON.stringify( $(myForm).serializeArray() );