zoukankan      html  css  js  c++  java
  • 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("有异常,请和管理员联系");
                            
                      });  
                    }
                });
  • 相关阅读:
    【原】一张图片优化5K的带宽成本
    让手机站点像原生应用的四大途径
    iScroll4下表单元素聚焦及键盘的异常问题
    蜕变·WebRebuild 2013 前端年度交流会邀请
    【原】js实现复制到剪贴板功能,兼容所有浏览器
    【原】css实现两端对齐的3种方法
    【原】常见CSS3属性对ios&android&winphone的支持
    一枚前端开发-页面重构方向的招聘信息
    【原】分享超实用工具给大家
    【原】webapp开发中兼容Android4.0以下版本的css hack
  • 原文地址:https://www.cnblogs.com/youcong/p/9152813.html
Copyright © 2011-2022 走看看