原文鏈接:https://www.cnblogs.com/zizaiwuyou/p/13936567.html
前幾天我遇到一個問題, 在后端獲取header內參數的一個方法出現了偶發的bug, 獲取不到值
之前是在controller父類中有一個保存request的方法, 如下
@ModelAttribute public void setRequest(HttpServletRequest request) { this.request = request; }
然后在獲取時直接
protected Integer getTeamId() { String teamIdStr = request.getHeader("teamId"); //如果header中不存在teamId,則從參數中獲取teamId if(StringUtils.isBlank(teamIdStr)){ teamIdStr = request.getParameter("teamId"); } return decryptTeamId(teamIdStr); }
這樣獲取會偶爾獲取不到
解決方法:
后來改了一下獲取方式, 使用如下的方式獲取request就好了
protected Integer getTeamId() { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); String teamIdStr = request.getHeader("teamId"); //如果header中不存在teamId,則從參數中獲取teamId if(StringUtils.isBlank(teamIdStr)){ teamIdStr = request.getParameter("teamId"); } return decryptTeamId(teamIdStr); }
主要是這兩句
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest();