Java Jersey 2.x在尝试使用SpringBoot记录非GET请求时抛出NegativeArraySizeException
由于Jersey 2.x在最新版本中不推荐使用LoggingFilter,我们继续使用Jersey自己的请求/响应日志以及log4j2。我们正在使用springboot。当我们使用POST方法访问web服务时,问题出现了,它抛出NegativeArraySizeExceptionJava Jersey 2.x在尝试使用SpringBoot记录非GET请求时抛出NegativeArraySizeException,java,spring-boot,jersey-2.0,log4j2,Java,Spring Boot,Jersey 2.0,Log4j2,由于Jersey 2.x在最新版本中不推荐使用LoggingFilter,我们继续使用Jersey自己的请求/响应日志以及log4j2。我们正在使用springboot。当我们使用POST方法访问web服务时,问题出现了,它抛出NegativeArraySizeException java.lang.NegativeArraySizeException at org.glassfish.jersey.logging.LoggingInterceptor.logInboundEntity(
java.lang.NegativeArraySizeException
at org.glassfish.jersey.logging.LoggingInterceptor.logInboundEntity(LoggingInterceptor.java:210) ~[jersey-common-2.23.2.jar:?]
at org.glassfish.jersey.logging.ServerLoggingFilter.filter(ServerLoggingFilter.java:108) ~[jersey-common-2.23.2.jar:?]
at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:132) ~[jersey-server-2.23.2.jar:?]
at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:68) ~[jersey-server-2.23.2.jar:?]
我的log4j2配置-
<!-- Jersey logger -->
<AsyncLogger name="org.glassfish" level="all" additivity="false">
<AppenderRef ref="Console" level="off" />
<AppenderRef ref="RollingFileIO" level="all" />
</AsyncLogger>
如果我将log level设置为关闭
,则一切正常。
SpringBoot版本1.4.3
为了安全起见,我可以在Wireshark中看到传入的数据 我得到了答案。为了让jersey写日志,我们注册了这个-
jerseyConfig.register(
new LoggingFeature(
java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME),
java.util.logging.Level.SEVERE,
LoggingFeature.Verbosity.PAYLOAD_ANY,
Integer.MAX_VALUE)
);
这里,第四个参数是maxEntitySize
,它是Integer.MAX\u值。因此,在创建日志缓冲区时,jersey正在使用引起异常的maxEntity+1
初始化数组
我把这个值改成了一个更低的/合乎逻辑的数字,一切正常