{"record":{"id":"8925cc8759cf65ca","repo":"dromara/Sa-Token","slug":"web-httpservletresponse","errorCode":null,"errorMessage":"非 web 上下文无法获取 HttpServletResponse","messagePattern":"非 web 上下文无法获取 HttpServletResponse","errorType":"exception","errorClass":"NotWebContextException","httpStatus":null,"severity":"error","filePath":"sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java","lineNumber":55,"sourceCode":"\t * 获取当前会话的 request 对象\n\t * @return request\n\t */\n\tpublic static HttpServletRequest getRequest() {\n\t\tServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();\n\t\tif(servletRequestAttributes == null) {\n\t\t\tthrow new NotWebContextException(\"非 web 上下文无法获取 HttpServletRequest\");\n\t\t}\n\t\treturn servletRequestAttributes.getRequest();\n\t}\n\t\n\t/**\n\t * 获取当前会话的 response 对象\n\t * @return response\n\t */\n\tpublic static HttpServletResponse getResponse() {\n\t\tServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();\n\t\tif(servletRequestAttributes == null) {\n\t\t\tthrow new NotWebContextException(\"非 web 上下文无法获取 HttpServletResponse\");\n\t\t}\n\t\treturn servletRequestAttributes.getResponse();\n\t}\n\n\t/**\n\t * 判断当前是否处于 Web 上下文中  \n\t * @return /\n\t */\n\tpublic static boolean isWeb() {\n\t\treturn RequestContextHolder.getRequestAttributes() != null;\n\t}\n\t\n}\n","sourceCodeStart":37,"sourceCodeEnd":69,"githubUrl":"https://github.com/dromara/Sa-Token/blob/ac2c7f6e94a78573cf0bcb932dd8b04e68fad189/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java#L37-L69","documentation":"Error \"非 web 上下文无法获取 HttpServletResponse\" thrown in dromara/Sa-Token.","triggerScenarios":"Thrown at sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java:55 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["仅在 Web 请求线程（如 Controller、拦截器）中调用 SpringMVCUtil.getResponse()，不要在定时任务、异步线程、启动初始化等非 Web 上下文中调用。","调用前先使用 SpringMVCUtil.isWeb() 判断当前是否处于 Web 上下文。","如需在非 Web 场景输出数据，改用日志、消息队列等方式，而非直接操作 HttpServletResponse。"],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"ac2c7f6e94a78573cf0bcb932dd8b04e68fad189","analyzedAt":"2026-08-14T14:36:10.271Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}