我有以下实用程序
函数来从cookie
获取值:
public static long getClientTimezoneOffset(HttpServletRequest request)
{
long timeZoneOffset = 0;
if(request != null)
{
Cookie[] cookies = request.getCookies(); // throws null pointer exeception from here
if(cookies != null)
{
for(Cookie cookie : cookies)
{
if(cookie.getName().equals("timezoneOffset"))
{
try
{
timeZoneOffset = Long.parseLong(cookie.getValue());
}
catch (Exception ex)
{
ex.printStackTrace();
}
break;
}
}
}
}
return timeZoneOffset;
}
java.lang.NullPointerException at org.apache.catalina.connector.Request.parseCookies(Request.java:2943) at org.apache.catalina.connector.Request.convertCookies(Request.java:2958) at org.apache.catalina.connector.Request.getCookies(Request.java:1987) at org.apache.catalina.connector.RequestFacade.getCookies(RequestFacade.java:662) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69)
我检查了 request
对象,它不是 NULL
。它并不总是抛出异常,但有时会抛出。这就是为什么弄清楚实际问题变得越来越困难。
我已经检查过与此相关的类似帖子,但这些都没有帮助。如有任何帮助,我们将不胜感激。
最佳答案
看起来这个问题已在版本 8.029 中修复。看到这个错误:https://bz.apache.org/bugzilla/show_bug.cgi?id=58578
您的 Tomcat 版本相当旧,可能是时候更新一下了。如果不可能,请在调用 request.getCookies()
之前检查一下 request.getContext() == null
。它可能仅在主机映射期间出现问题时才会发生,但如果没有更多信息,我无法告诉您确切的原因。通过一些额外的日志记录,您也许能够比较好请求和坏请求的详细信息,看看差异在哪里。
编辑:
升级到 tomcat 8.0.36
解决了该问题。
关于java - request.getCookies() 抛出 NullPointerException 尽管请求不为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38429980/