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("有异常,请和管理员联系");
                        
                  });  
                }
            });
复制代码

 

posted @   挑战者V  阅读(1972)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示