話不多說,直接上正文。
異常信息:
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); }
感想:
遇到比較難的問題,還是仔細閱讀錯誤信息以及單步調試吧