標籤:enc converter pre url 導致 有助於 turn 常見問題 記錄
這是我個人再編寫部落格系統的時候,因個人疏忽犯下的低級錯誤。
不過犯錯是一件好事,有助於總結。
1.關於參數前加@RequestBody
如果是使用ajax互動時,必須要加上這個contentType: ‘application/json;charset=utf-8‘
否則會出現這個異常:
錯誤資訊:org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported
不支援這種類型傳遞,是因為沒有在前台進行定義,說明傳遞的內容必須為json。有些時候特別後台以@RequestBody作為傳參時,必須在ajax中加上contentType: ‘application/json;charset=utf-8‘,加上這個意味著你已經將傳遞的對象定義為json類型,@RequestBody也僅僅支援json類型。所以就很容易理解這個錯誤的發生原因。特別是我們開發人員大軍們,其中不乏有這樣的人,對於從來沒遇到的錯誤,複製粘貼到百度去搜尋,通常前人們遇到過,通過部落格的形式記錄下來錯誤資訊及其如何解決,及其為什麼會發生。但是我們有些朋友只看如何解決,至於為什麼會發生從來就不管。
錯誤資訊:org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token ‘email‘: was expecting (‘true‘, ‘false‘ or ‘null‘); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token ‘email‘: was expecting (‘true‘, ‘false‘ or ‘null‘)
這個錯誤是因為你定義的json對象參數沒有寫全導致,同時導致這種錯誤還有就是對於後台以@RequestBody接收參數,必須在ajax中的data對應值中寫上JSON.stringify
樣本:
這樣寫就是對的,就不會發生上述的錯誤
$.ajax({ url:"/blog-web/user/register", type:"POST", contentType: ‘application/json;charset=utf-8‘, data : JSON.stringify(data), dataType : ‘json‘, success:function(data){ if(data.returnCode=="333333"){ layui.use(‘layer‘, function(){ var layer = layui.layer; layer.alert(data.returnMsg, {icon: 5}); }); }else if(data.returnCode=="222222"){ layui.use(‘layer‘, function(){ var layer = layui.layer; layer.alert(data.returnMsg, {icon: 5}); }); }else if(data.returnCode=="111111"){ layui.use(‘layer‘, function(){ var layer = layui.layer; layer.alert(data.returnMsg, {icon: 5}); }); }else if(data.returnCode=="000000"){ layui.use(‘layer‘, function(){ var layer = layui.layer; layer.alert("請稍後,馬上進入"+data.returnMsg,{icon: 1}); }); setTimeout(() => { view(); }, 10000); } },error:function(){ layui.use(‘layer‘, function(){ var layer = layui.layer; layer.alert("有異常,請和管理員聯絡"); }); } });
springmvc與ajax互動常見問題