zoukankan      html  css  js  c++  java
  • spring HandlerInterceptorAdapter拦截ajax异步请求,报错ERR_INCOMPLETE_CHUNKED_ENCODING

    话不多说,直接上正文。

    异常信息:

      Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING

    问题描述:

      该异常是在页面发送ajax请求到服务器,中间使用了HandlerInterceptorAdapter对请求做了处理。ajax返回json格式的数据时发生的错误信息。
    网络上搜索出的问题大多是页面、权限、或者其他不相关的问题导致的。浪费了很多时间、精力之后,发现自己找错了方向。

    解决思路:

    step1.
      英文翻译:网络错误:不完整的分块编码。
      技术翻译:网络传输错误,不完整的报文结构
    step2.
      单步调试:在HandlerInterceptorAdapter中的postHandle()方法中,有对modelAndView添加的model进行处理,此时的modelAndView为null!--bingo!
      源代码:
        
        @Override
        public void postHandle(HttpServletRequest httpServletRequest,
                               HttpServletResponse httpServletResponse, Object o,
                               ModelAndView modelAndView) throws Exception {
            HttpSession session = httpServletRequest.getSession();
            String userName = session.getAttribute(Constants.SESSION_USER_NAME).toString();
            modelAndView.addObject("username", userName);
            super.postHandle(httpServletRequest, httpServletResponse, o, modelAndView);
      }
       简单的说,就是发送的是ajax异步请求,只是想获取一个json封装的数据,而在拦截器中却硬生生的加了个modelAndView,而且controller层返回的数据中也并没有实例modelAndView。这个modelAndView也不是ajax请求想要的返回数据。
     

    解决方案:

      对modelAndView为null做个判断:
      
      if (!modelAndView.isEmpty()) {
                modelAndView.addObject("username", userName);
           }

    感想:

      遇到比较难的问题,还是仔细阅读错误信息以及单步调试吧
  • 相关阅读:
    构建调试Linux内核网络代码的环境MenuOS系统
    关于iOS开发证书的一些总结(很有用)
    iOS原型模式
    iOS不用调用,running time自动执行方法
    关于网络设计服务结构的一些理解
    iOS 6.0之后支持一个页面横屏的方法
    iOS返回一个前面没有0,小数点后保留两位的数字字符串
    CoreData总结
    分享一个复用代码块的博客
    分享一个可以打开沙盒的软件
  • 原文地址:https://www.cnblogs.com/not-NULL/p/6148863.html
Copyright © 2011-2022 走看看