parent
							
								
									354d9c70b0
								
							
						
					
					
						commit
						37f61700c1
					
				| @ -1,68 +0,0 @@ | ||||
| package com.gitee.sop.gatewaycommon.gateway.codec; | ||||
| 
 | ||||
| import com.gitee.sop.gatewaycommon.manager.EnvironmentKeys; | ||||
| import org.springframework.core.codec.AbstractDataBufferDecoder; | ||||
| import org.springframework.core.codec.Decoder; | ||||
| import org.springframework.http.codec.DecoderHttpMessageReader; | ||||
| import org.springframework.http.codec.HttpMessageReader; | ||||
| import org.springframework.util.ReflectionUtils; | ||||
| import org.springframework.web.reactive.function.client.ExchangeStrategies; | ||||
| import org.springframework.web.reactive.function.server.HandlerStrategies; | ||||
| 
 | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.List; | ||||
| 
 | ||||
| /** | ||||
|  * @author tanghc | ||||
|  */ | ||||
| public class MessageReaderFactory { | ||||
| 
 | ||||
|     public static final String METHOD_SET_MAX_IN_MEMORY_SIZE = "setMaxInMemorySize"; | ||||
|     public static final String METHOD_GET_DECODER = "getDecoder"; | ||||
|     public static final int DEFAULT_SIZE = 256 * 1024; | ||||
| 
 | ||||
|     public static List<HttpMessageReader<?>> build() { | ||||
|         String maxInMemorySizeValueStr = EnvironmentKeys.MAX_IN_MEMORY_SIZE.getValue(); | ||||
|         int maxInMemorySizeValue = Integer.parseInt(maxInMemorySizeValueStr); | ||||
|         List<HttpMessageReader<?>> messageReaders = HandlerStrategies.withDefaults().messageReaders(); | ||||
|         if (DEFAULT_SIZE == maxInMemorySizeValue) { | ||||
|             return messageReaders; | ||||
|         } | ||||
|         // 设置POST缓存大小
 | ||||
|         for (HttpMessageReader<?> httpMessageReader : messageReaders) { | ||||
|             Method[] methods = ReflectionUtils.getDeclaredMethods(httpMessageReader.getClass()); | ||||
|             for (Method method : methods) { | ||||
|                 String methodName = method.getName(); | ||||
|                 if (METHOD_SET_MAX_IN_MEMORY_SIZE.equals(methodName)) { | ||||
|                     ReflectionUtils.invokeMethod(method, httpMessageReader, maxInMemorySizeValue); | ||||
|                 } else if (METHOD_GET_DECODER.equals(methodName)) { | ||||
|                     Object decoder = ReflectionUtils.invokeMethod(method, httpMessageReader); | ||||
|                     if (decoder instanceof AbstractDataBufferDecoder) { | ||||
|                         AbstractDataBufferDecoder<?> bufferDecoder = (AbstractDataBufferDecoder<?>) decoder; | ||||
|                         bufferDecoder.setMaxInMemorySize(maxInMemorySizeValue); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return messageReaders; | ||||
|     } | ||||
| 
 | ||||
|     public static void initMaxInMemorySize(ExchangeStrategies exchangeStrategies) { | ||||
|         // 修复返回大文本数据报org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
 | ||||
|         String maxInMemorySizeValueStr = EnvironmentKeys.MAX_IN_MEMORY_SIZE.getValue(); | ||||
|         int maxInMemorySizeValue = Integer.parseInt(maxInMemorySizeValueStr); | ||||
|         if (DEFAULT_SIZE == maxInMemorySizeValue) { | ||||
|             return; | ||||
|         } | ||||
|         for (HttpMessageReader<?> messageReader : exchangeStrategies.messageReaders()) { | ||||
|             if (messageReader instanceof DecoderHttpMessageReader) { | ||||
|                 DecoderHttpMessageReader reader = (DecoderHttpMessageReader) messageReader; | ||||
|                 Decoder decoder = reader.getDecoder(); | ||||
|                 if (decoder instanceof AbstractDataBufferDecoder) { | ||||
|                     AbstractDataBufferDecoder dataBufferDecoder = (AbstractDataBufferDecoder)decoder; | ||||
|                     dataBufferDecoder.setMaxInMemorySize(maxInMemorySizeValue); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue