小编Ric*_*ick的帖子

为什么我使用 foreach 总是得到 ArrayIndexOutOfBoundsException

我使用流将旧代码更改为新代码。但是当我启动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)

foreach indexoutofboundsexception java-stream

2
推荐指数
1
解决办法
1779
查看次数

如何将整个响应数据保存到 nginx error.log?

我想获得所有请求和响应的详细信息,我正在考虑将它们保存到 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)

请帮我解释一下,以及如何更改任何配置以保存整个响应数据。或者任何其他更适合保存请求和响应详细信息的建议。 谢谢!

lua nginx openresty

2
推荐指数
1
解决办法
1178
查看次数