springmvc與ajax交互常見問題


這是我個人再編寫博客系統的時候,因個人疏忽犯下的低級錯誤。

不過犯錯是一件好事,有助於總結。

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("有異常,請和管理員聯系");
                        
                  });  
                }
            });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM