我使用流将旧代码更改为新代码。但是当我启动tomcat时它不断出现
错误 osweb.servlet.DispatcherServlet - 上下文初始化失败 org.springframework.beans.factory.BeanDefinitionStoreException:无法读取候选组件类:文件 xxx(我的 FilePath)嵌套异常是 java.lang.ArrayIndexOutOfBoundsException:25091”
谁能告诉我是什么原因导致这个错误?我真的很感谢你的帮助。
/*old*/
for(String key:paramMap.keySet()){
if(key.startsWith("NUMBER_OF_") ){
String value = request.getParameter(key);
if(value!=null && !value.equals("")){
br.append(key.replace("NUMBER_OF_", "")).append(" = ")
.append('"').append(value).append('"').append(" and ");
}
}
}
/*new*/
new ArrayList<>(paramMap.keySet()).stream().filter(p -> p.startsWith("NUMBER_OF_")).forEach(
o ->{
String value = request.getParameter(o);
if(value!=null && !value.equals("")){
br.append(o.replace("NUMBER_OF_", "")).append(" = ")
.append('"').append(value).append('"').append(" and ");
}
});
Run Code Online (Sandbox Code Playgroud)
整个堆栈跟踪:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\apache-tomcat-7.0.61\webapps\web\WEB-INF\classes\com\ais\brm\web\controllers\system\metadic\MetaDicManageController.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:260)
org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) …Run Code Online (Sandbox Code Playgroud) 我想获得所有请求和响应的详细信息,我正在考虑将它们保存到 ngx.log。
我用这样的代码来保存它们,我想从响应体中获取5000个字符的长度,但是在error.log文件中,它只保存了每个响应的一部分响应数据,比5000短得多。
body_filter_by_lua_block
{
local resp_body = string.sub(ngx.arg[1], 1, 5000)
ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
if ngx.arg[2] then
ngx.var.resp_body = ngx.ctx.buffered
end
}
log_by_lua_block{
local data = {response={}, request={}}
local req = ngx.req.get_headers()
req.accessTime = os.date("%Y-%m-%d %H:%M:%S")
data.request = req
local resp = data.response
resp.headers = ngx.resp.get_headers()
resp.status = ngx.status
resp.duration = ngx.var.upstream_response_time
resp.body = ngx.var.resp_body
ngx.log(ngx.NOTICE,"from log pharse:", json.encode(data));
}
Run Code Online (Sandbox Code Playgroud)
请帮我解释一下,以及如何更改任何配置以保存整个响应数据。或者任何其他更适合保存请求和响应详细信息的建议。 谢谢!