本想做个小项目温习一下Springboot,结果项目刚开始就遇到bug被卡住。
问题描述:前端页面提交Form表单,后端在Controller中想要用实体类接收表单数据,结果一直报错,如:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘application/json;charset=UTF-8’ not supported
在网上看了很多博客,有说是@RequestBody 注解那边的问题,还有些说注解@RequestMapping中要这样写method = RequestMethod.POST,produces = “text/plain;charset=UTF-8”
都试了,结果都没能解决问题。
后来想着在前端把表单数据alert一下看看,结果…
前端表单数据序列化时出了问题,JQuery中的serializeArray()或serialize()方法将表单数据序列化后都不能被解析。
serializeArray序列化后数据类型为:
[
{name: 'price', value: '5'},
{name: 'phone', value: '123456'},
{name: 'sum',value:'30'}, // this one was empty
]
serialize()方法序列化后数据类型为:
price=5&phone=123456&sum=30
以上的数据类型,在后端不能自动映射到实体类对应的属性中。
需要将表单数据转化为常见的json格式,如:{“price”:“2”,“phone”:“123456”,“sum”:“30”}
可以自定义serializeObject方法进行转化
jQuery.fn.serializeObject = function () {
var formData = {};
var formArray = this.serializeArray();
for (var i = 0, n = formArray.length; i < n; ++i) {
formData[formArray[i].name] = formArray[i].value;
}
return formData;
};