Spring MVC無法正確接收From表單參數(shù)的解決方案
問題描述
先看有問題的代碼:
controller:
@ResponseBody
@PostMapping(value = "/addUser")
public String addUser(@RequestBody AdminPersonVo adminPersonVo) {
return "success";
}
js:
$(form).ajaxSubmit({
url:"/addUser",
type:"POST",
contentType: 'application/json;charset=utf-8',
filtering: function(el, index) {
if ( !$(el).hasClass('ignore') ) {
return el;
}
},
success: function (data) {
alert(data);
}
});
表單提交報錯如下:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token 'name': was expecting 'null', 'true', 'false' or NaN; nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'name': was expecting 'null', 'true', 'false' or NaN?
錯誤信息大概意思是: jackson 無法正確解析 json 。
開始踏上尋找解決之路……
看完上面代碼能看出問題所在的話可以不用往下面看了
知識要點
要點一
ajax請求中的 contentType: ‘application/json;charset=utf-8’ 如果不加的話,會報如下錯誤:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]
表達(dá)意思也很清晰,默認(rèn)的請求參數(shù)類型是: application/x-www-form-urlencoded;charset=UTF-8,而現(xiàn)在的代碼不支持這種類型的參數(shù)請求。
要點二
聚焦 @RequestBody 這個注解。
@RequestBody 注解常用來處理 content-type 不是默認(rèn)的 application/x-www-form-urlencoded 編碼的內(nèi)容,比如說:application/json 或者是 application/xml 等。
這就是為什么代碼不支持 application/x-www-form-urlencoded 的原因。
解決辦法
將 controller 中的 @RequestBody 去掉,將 JS 中的 contentType: ‘application/json;charset=utf-8’ 去掉,就能正常接收參數(shù)了
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Servlet Filter實現(xiàn)系統(tǒng)登錄權(quán)限
SpringMVC運行時出現(xiàn)404錯誤的解決辦法匯總(基本包含所有錯誤可能)

