1. 程式人生 > >springmvc與ajax交互常見問題

springmvc與ajax交互常見問題

如果 not string 說明 gen jackson 定義 org data

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

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

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交互常見問題